3201. Find the Maximum Length of Valid Subsequence II
Description
You are given an integer array
nums and a positive integer k. A sub of nums with length x is called valid if it satisfies:
(sub[0] + sub[1]) % k == (sub[1] + sub[2]) % k == ... == (sub[x - 2] + sub[x - 1]) % k.
nums.
Example 1:
Input: nums = [1,2,3,4,5], k = 2
Output: 5
Explanation:
The longest valid subsequence is [1, 2, 3, 4, 5].
Example 2:
Input: nums = [1,4,2,3,1,4], k = 3
Output: 4
Explanation:
The longest valid subsequence is [1, 4, 1, 4].
Constraints:
2 <= nums.length <= 1031 <= nums[i] <= 1071 <= k <= 103
Solutions
Solution: Dynamic Programming
- Time complexity: O(nk)
- Space complexity: O(k2)
JavaScript
js
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
const maximumLength = function (nums, k) {
const dp = Array.from({ length: k }, () => new Array(k).fill(0));
let result = 0;
for (const num of nums) {
const mod = num % k;
for (let prev = 0; prev < k; prev++) {
dp[mod][prev] = dp[prev][mod] + 1;
result = Math.max(dp[mod][prev], result);
}
}
return result;
};