思路:单调队列,完成此题前请完成239题
本题唯一区别是要改变自身值,
class Solution {
public:
int maxResult(vector<int>& nums, int k) {
vector <int> win;
int l = nums.size();
int first = 0;
int last = -1;
for(int i = 0; i < l; i++){
while(first <= last && win[first] < i - k){
first++;
}
if(last < first){
win.push_back(i);
last++;
continue;
}
nums[i] += nums[win[first]];
for(int j = last; j >= first; j--){
if(nums[i] >= nums[win[j]]){
win.pop_back();
last--;
}else{
win.push_back(i);
last++;
break;
}
}
if(last < first){
win.push_back(i);
last++;
continue;
}
// cout << i << endl;
}
return nums[l-1];
}
};