1. 程式人生 > 其它 >674.最長連續遞增序列Java

674.最長連續遞增序列Java

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) {...}
}

輸出結果

在這裡插入圖片描述