1. 程式人生 > 其它 >Leetcode刷題筆記 674. 最長連續遞增序列

Leetcode刷題筆記 674. 最長連續遞增序列

技術標籤:leetcodeleetcode演算法

674. 最長連續遞增序列

知識點:陣列
時間:2021年1月24日
題目連結

題目
給定一個未經排序的整數陣列,找到最長且 連續遞增的子序列,並返回該序列的長度。

連續遞增的子序列 可以由兩個下標 l 和 r(l < r)確定,如果對於每個 l <= i < r,都有 nums[i] < nums[i + 1] ,那麼子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是連續遞增子序列。

示例 1
輸入:nums = [1,3,5,4,7]
輸出:3

解釋:最長連續遞增序列是 [1,3,5], 長度為3。
儘管 [1,3,5,7] 也是升序的子序列, 但它不是連續的,因為 5 和 7 在原數組裡被 4 隔開。

示例 2
輸入:nums = [2,2,2,2,2]
輸出:1
解釋:最長連續遞增序列是 [2], 長度為1。

提示

  • 0 <= nums.length <= 104
  • -109 <= nums[i] <= 109

解題思路

  1. 遍歷陣列 邊遍歷邊更新
  2. 這裡用pre記錄之前的數 temp表示當前最長的序列 ans表示答案
  3. 如果當前的數 小於等於pre 說明這個不能成為連續遞增 temp初始化為1
  4. 否則 temp增加
  5. 比較temp和ans的大小

程式碼

#include "cheader.h"
class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        if(nums.size() == 0)
            return 0;
        int ans = 1,pre = nums[0], temp = 1;
        for(int x: nums){
            if(pre < x)
                temp++;
            else
temp = 1; pre = x; ans = max(ans,temp); } return ans; } }; int main() { vector<int> nums{1,3,5,4,2,3,4,5}; Solution s; cout<<s.findLengthOfLCIS(nums)<<endl; return 0; }

今天也是愛zz的一天哦!