A subsequence of an array is obtained by deleting some number of elements (can be zero) from the array, leaving the remaining elements in their original order.
Input: nums = [10,2,-10,5,20], k = 2
Output: 37
Explanation: The subsequence is [10, 2, 5, 20].
Input: nums = [-1,-2,-3], k = 1
Output: -1
Explanation: The subsequence must be non-empty, so we choose the largest number.
Input: nums = [10,-2,-10,-5,20], k = 2
Output: 23
Explanation: The subsequence is [10, -2, -5, 20].
//have a window array that should not exceed the size k
//store index and lastKsum in that window array, initialize "max" to nums[0]
//for nums length iterate over array, extract first elememt of window (index, lastKsum)
//check if window is in bound of k size.
//if not shift the first element out
//calculate the newsum which would be lastKsum/0 + nums[i]
//calcute max from max and newsum
//pop out the elements from window till their lastKsum is less than new sum or the window is empty
//push the index and new sum to window
//return max
var constrainedSubsetSum = function(nums, k) {
var window = [[0,nums[0]]];
var max = nums[0];
for(var i=1; i<nums.length; i++){
var [index,lastKsum] = window[0];
if(index == i-k){
window.shift();
}
var sum = Math.max(lastKsum, 0) + nums[i]
max = Math.max(max, sum);
while(window.length>0 && window[window.length-1][1] < sum){
window.pop();
}
window.push([i,sum]);
}
return max;
};