题目:
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 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
来源:力扣(LeetCode)
思路:
设置指针x,y,for循环判断数组当前索引值与后一位索引值大小,若当前位小于后一位,则y++(y相当于当前连续递增子序列的长度,因此一开始=0),Math.max(x,y)方法返回两数中的最大值给x(x用于存储目前为止序列中的最长子序列长度)。若当前位大于后一位,则递增中断,判断此时子序列长度与之前x中存入的哪个大,把较大的数赋值给x,然后y从1开始计算下一个子序列长度,最终循环完毕返回x。
运行后发现如果数组中只有一个元素无法比较,会返回错误的值所以增加判断:
if(nums.length==1){
return 1;
}
代码实现:
class Solution {
public int findLengthOfLCIS(int[] nums) {
int x=0,y=1;
if(nums.length==1){
return 1;
}
for(int i=0;i<nums.length-1;i++){
if (nums[i]>=nums[i+1]) {
x=Math.max(x,y);
y=1;
}else {
y++;
x=Math.max(x,y);
}
}
return x;
}
}