1、前言

2、思路
这道题其实是逆向思维,找到原数组中最长的窗口(就是 sum - x 的值),数组长度减最长窗口,就是最小操作数。
但是有些 base case 特别恶心。
3、代码
class Solution {
public int minOperations(int[] nums, int x) {
int sum = 0;
for (int num : nums) {
sum += num;
}
int target = sum - x;
if(target < 0){
return -1;
}
int len = nums.length;
List<Integer> window = new ArrayList<>();
int winSum = 0, maxWinLen = -1;
for (int num : nums) {
window.add(num);
winSum += num;
while (winSum > target){
Integer remove = window.remove(0);
winSum -= remove;
}
if(winSum == target){
maxWinLen = Math.max(maxWinLen, window.size());
}
}
return maxWinLen < 0 ? -1 : len - maxWinLen;
}
}
网友评论