算法|最长递增自序列长度
最长递增自序列
问题
给你一个整数数组 A,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
算法
构造board数组,令board[i]为记录以A[i]结尾的最长递增子序列的长度;
因为每个元素自身也是子序列,因此board初始为全一数组;
对于任意两个board元素,若i>j,且A[i]>A[j],那么board[i]至少为board[j]+1;
由此可得board[i]为0~i-1中符合上述条件的board值+1。
代码
int solve(vector<int>& nums) {
auto len=nums.size();
vector<int> board(len,1);
int max_v=1;
for(int i=1;i<len;++i){
for(int j=0;j<i;++j){
if(nums[i]>nums[j]&&board[j]>=board[i]){
board[i]=board[j]+1;
}
}
max_v=max(max_v,board[i]);
}
return max_v;
}

浙公网安备 33010602011771号