Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LeetCode 674. Longest Continuous Increasing Subsequence #45

Open
Woodyiiiiiii opened this issue May 7, 2020 · 0 comments
Open

LeetCode 674. Longest Continuous Increasing Subsequence #45

Woodyiiiiiii opened this issue May 7, 2020 · 0 comments

Comments

@Woodyiiiiiii
Copy link
Owner

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.


这是一道简单的线性规划问题。题目要求的是找到最长的连续增长子数组。那么我们可以设置一个一维线性DP数组,dp[i]表示以nums[i]结尾的最长连续递增子数组。状态转移方程是dp[i] = (nums[i] > nums[i - 1]) ? dp[i - 1] + 1 : 1。

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int n = nums.length;
        if (n == 0) return 0;
        int[] dp = new int[n];
        dp[0] = 1;
        int maxLength = 1;
        for (int i = 1; i < n; ++i) {
            dp[i] = (nums[i] > nums[i - 1]) ? dp[i - 1] + 1 : 1;
            maxLength = Math.max(maxLength, dp[i]);
        }
        return maxLength;
    }
}

可以继续优化,将空间复杂度降至为常数级别:

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        int n = nums.length;
        if (n == 0) return 0;
        int maxLength = 1, preSum = 1;
        for (int i = 1; i < n; ++i) {
            int sum = (nums[i] > nums[i - 1]) ? preSum + 1 : 1;
            maxLength = Math.max(maxLength, sum);
            preSum = sum;
        }
        return maxLength;
    }
}

参考资料:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant