持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
今天,我们继续搞算法。
题目描述
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列.
解题过程
啥度不会先写解
然后我们看入参,入参是一个数组,那数组里面有什么呢?我们看示例:
输入: nums = [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长递增子序列是 [2,3,7,101],因此长度为 4 。
给了你一个数组,返回它的最长递增子序列,子序列我们知道,就是不连续的选几个数,比如这个[10,9]就是一个子序列,还得递增那就是[9,10]。那这个问题就是这个数选还是不选的问题,因为我们要的是递增的序列,所以我们不会选所有的数,假设我们选了第i个数,当然是满足递增的,不满足递增的我们不会选,然后我们需要遍历i之前的数,把他们选的数的长度还得加上i本身再和选的i本身进行比较,谁大就要谁。然后我们遍历所有函数,取最大的一个就是我们要返回的答案。
class Solution {
public int lengthOfLIS(int[] nums) {
int m = nums.length;
int f[] = new int[m];
for(int i=0;i<m;i++) f[i] = 1;
for(int i=0;i<m;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]){
f[i] = Math.max(f[i],f[j]+1);
}
}
}
int ans =0;
for(int i = 0;i<m;i++){
ans=Math.max(ans,f[i]);
}
return ans;
}
}