674. 最长连续递增序列(LeetCode)
代码
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
if(nums.size()==0) return 0;
int t = 1 , ans = 0;
for(int i = 1 ; i < nums.size() ; i++){
if(nums[i-1] < nums[i]) t++;
else{
ans = max(ans,t);
t = 1;
}
}
return max(ans,t);
}
};
解析:
形如[ \(a_1\),\(a_2\),\(a_3\) ]的序列:
假设[ \(a_1\),\(a_2\),\(a_3\) ]为一个\(nums[\,]\)的上升序列,\(a_3\) \(\ge\) \(a_2\),[\(a_4\),\(a_5\)]为另一个独立的上升序列,很容易知道 \(ans = 3\)。每次读取\(nums[\,]\)的时候,会更新一次长度 \(t\),到了第一个序列的末尾,就将\(ans\)更新为\(t\)。然后\(t\)重新置\(1\),周而复始,最后一次直接\(return\)继续比较后的,因为这个时候的\(ans\)不是最大的就是次大的,故只需和最后一个\(t\)长度的子序列比较一下取最大值就行了。
假设原序列为 [\(2\),\(2\),\(2\)],那么返回的就是\(1\),因为只有数组的子序列全是\(2\),所以只需取[\(2\)]就OK。
要一直快乐