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.
<Solution>想法如下
- 用 slicing window 的想法。當 nums[i-1] >= nums[i] 時,將左邊界移到 i,重新開始找
- 每次 iteration 時,都去計算當下的最長長度
Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public int findLengthOfLCIS(int[] nums) { | |
if(nums.length < 2) { | |
return nums.length == 0 ? 0 : 1; | |
} | |
int anchor = 0; | |
int ans = Integer.MIN_VALUE; | |
for(int i = 0; i < nums.length; i++) { | |
if(i > 0 && nums[i-1] >= nums[i]) { | |
anchor = i; | |
} | |
ans = Math.max(ans, i - anchor + 1); | |
} | |
return ans; | |
} | |
} |
Kotlin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
fun findLengthOfLCIS(nums: IntArray): Int { | |
var left = 0 | |
var ans = Int.MIN_VALUE | |
for(right in nums.indices) { | |
if(right > 0 && nums[right - 1] >= nums[right] ) { | |
left = right | |
} | |
ans = Math.max(ans, right - left + 1) | |
} | |
return ans | |
} | |
} |
沒有留言:
張貼留言