Given an unsorted array of integers, find the length of longest continuous
increasing subsequence (subarray).
Example 1:
Input: [1,3,5,4,7] Output: 3 Explanation: The longest continuous increasing subsequence is [1,3,5], its length is 3. Even though [1,3,5,7] is also an increasing subsequence, it's not a continuous one where 5 and 7 are separated by 4.
Example 2:
Input: [2,2,2,2,2] Output: 1 Explanation: The longest continuous increasing subsequence is [2], its length is 1.
Note: Length of the array will not exceed 10,000.
讲道理这题最先想到用DP,不过还是先上一个非DP的吧:)
1 class Solution { 2 public: 3 int findLengthOfLCIS(vector<int>& nums) { 4 5 if(nums.empty()) 6 return 0; 7 8 int n = nums.size(); 9 10 int cnt = 1, res = 0; 11 12 for(int i = 1; i < n;++i) 13 { 14 if(nums[i] > nums[i - 1]) 15 { 16 ++cnt; 17 } 18 else 19 { 20 res = max(res, cnt); 21 cnt = 1; 22 } 23 } 24 25 return max(res, cnt); 26 } 27 };
再上个DP的:
1 class Solution { 2 public: 3 int findLengthOfLCIS(vector<int>& nums) { 4 5 if(nums.empty()) 6 return 0; 7 8 int n = nums.size(); 9 int res = 1; 10 vector<int> dp(n, 1); 11 12 for(int i = 1; i < n;++i) 13 { 14 if(nums[i] > nums[i - 1]) 15 { 16 dp[i] = dp[i-1] + 1; 17 } 18 else 19 { 20 dp[i] = 1; 21 } 22 23 res = max(res, dp[i]); 24 } 25 26 return res; 27 } 28 };