Sign in with Google

Google will share your name, email, and profile picture with DevExCode. See our privacy policy.

LeetCode 2407: Longest Increasing Subsequence II

LeetCode 2407 Solution Explanation

Explanation:

To solve this problem, we can use dynamic programming to find the longest increasing subsequence with a maximum difference of k between adjacent elements. The idea is to maintain a list of the longest increasing subsequences ending at each index of the input array. For each index, we can iterate through all previous elements to find the longest increasing subsequence that ends with that element and also satisfies the maximum difference constraint.

Algorithm:

  1. Initialize a dynamic programming array dp of length equal to the input array nums.
  2. For each index i in the array nums, iterate from index j=0 to i-1:
    • If nums[i] - nums[j] <= k, update dp[i] to the maximum of dp[i] and dp[j] + 1.
  3. Find the maximum value in the dp array which represents the length of the longest increasing subsequence that satisfies the maximum difference constraint.
  4. Return the maximum value as the result.

Time Complexity:

The time complexity of this approach is O(n^2), where n is the length of the input array nums.

Space Complexity:

The space complexity is O(n) to store the dynamic programming array.

:

LeetCode 2407 Solutions in Java, C++, Python

class Solution {
    public int lengthOfLIS(int[] nums, int k) {
        int n = nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp, 1);
        int maxLen = 1;
        
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] - nums[j] <= k) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
            maxLen = Math.max(maxLen, dp[i]);
        }
        
        return maxLen;
    }
}

Interactive Code Editor for LeetCode 2407

Improve Your LeetCode 2407 Solution

Use the editor below to refine the provided solution for LeetCode 2407. Select a programming language and try the following:

  • Add import statements if required.
  • Optimize the code for better time or space complexity.
  • Add test cases to validate edge cases and common scenarios.
  • Handle error conditions or invalid inputs gracefully.
  • Experiment with alternative approaches to deepen your understanding.

Click "Run Code" to execute your solution and view the output. If errors occur, check the line numbers and debug accordingly. Resize the editor by dragging its bottom edge.

Loading editor...

Related LeetCode Problems