674.最長連續遞增序列Java
阿新 • • 發佈:2021-04-28
674.最長連續遞增序列Java
題目描述
給定一個未經排序的整數陣列,找到最長且連續遞增的子序列,並返回該序列的長度。
連續遞增的子序列可以由兩個下標 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。
本文題來自LeetCode:https://leetcode-cn.com/problems/longest-continuous-increasing-subsequence/
思路
遍歷一遍陣列,一邊遍歷一遍判斷當前元素nums[i]和nums[i - 1]的大小關係,如果滿足遞增則把計數元素count++,否則的話就要把count重置為初始值1;並且每次要把count值存到rst中作為最大連續遞增元素個數返回。
演算法分析
時間複雜度為遍歷陣列的O(n),空間複雜度為O(1)
求解函式
public int findLengthOfLCIS(int[] nums) {
int count = 1, rst = 1;//count為遞增元素個數,rst儲存count的最大值
for (int i = 1; i < nums.length; ++i) {
if (nums[i] > nums[i - 1]) {
++count;
rst = count > rst ? count : rst;
} else count = 1;
}
return rst;
}
主函式呼叫
class Solution674 {
public static void main(String[] args) {
int[] nums = new int[]{1, 3, 5, 4, 7};
Solution674 sol = new Solution674();
System.out.println(sol.findLengthOfLCIS(nums));
}
public int findLengthOfLCIS(int[] nums) {...}
}