给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 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。
提示:
1 <= nums.length <= 104
-109 <= nums[i] <= 109
链接:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.array.max;
/**
* 674. 最长连续递增序列 <br/>
* 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。<br/>
*
* 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,<br/>
* 如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,<br/>
* 那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。
*
* 来源:力扣(LeetCode) 链接:力扣
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
* @author wen.lei@brgroup.com
*
* 2022-3-9
*/
public class LongestContinuousIncreasingSubsequence {
/* 示例 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。
提示:
1 <= nums.length <= 104
-109 <= nums[i] <= 109*/
/**
* 和这个题MonotonicArray类似,同MaxConsecutiveOnes代码结构一致
*
* @param nums
* @return
*/
public int findLengthOfLCIS(int[] nums) {
int prev = nums[0];
int maxLength = 0;
int curLength = 1;
// 升序时,当前的 不应该比 前面的小
for (int index=1;index< nums.length;index++) {
int cur = nums[index];
//升序,可能一直不中断
if (cur > prev) {
curLength++;
} else {
//升序,中断了
maxLength=Math.max(curLength, maxLength);
curLength=1;
}
prev = cur;
}
return Math.max(curLength, maxLength);
}
}
package test.leecode.array;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.array.max.LongestContinuousIncreasingSubsequence;
/**
* @author wen.lei@brgroup.com
*
* 2022-2-25
*/
public class LongestContinuousIncreasingSubsequenceTest {
@Test
public void test() {
LongestContinuousIncreasingSubsequence test = new LongestContinuousIncreasingSubsequence();
Assert.assertEquals(3, test.findLengthOfLCIS(new int[] {1,3,5,4,7}));
Assert.assertEquals(1, test.findLengthOfLCIS(new int[] {1,1,1,1}));
Assert.assertEquals(2, test.findLengthOfLCIS(new int[] {1,3,2,4,3}));
Assert.assertEquals(5, test.findLengthOfLCIS(new int[] {1,3,5,4,7,8,9,10}));
Assert.assertEquals(6, test.findLengthOfLCIS(new int[] {1,2,3,5,9,10}));
}
}