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。

posted @ 2021-01-24 02:06  皮使我快乐  阅读(84)  评论(0)    收藏  举报