力扣题目:拆炸弹
题目链接: 1652.拆炸弹
题目描述
代码思路
根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理,而k不等于0时,需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口,然后移动,获取修改后该位置的值,直到整个数组修改完毕。
代码解析版
class Solution {
public int[] decrypt(int[] code, int k) {
int n = code.length;
// k==0时
if (k == 0) {
return new int[n];
}
//k!=0时
int[] res = new int[n];
int[] newCode = new int[n * 2];
//newcode是两个code连在一起
System.arraycopy(code, 0, newCode, 0, n);
System.arraycopy(code, 0, newCode, n, n);
code = newCode;
//确定起始窗口
int l = k > 0 ? 1 : n + k;
int r = k > 0 ? k : n - 1;
int w = 0;
for (int i = l; i <= r; i++) {
w += code[i];
}
//滑动窗口
for (int i = 0; i < n; i++) {
res[i] = w;
w -= code[l];
w += code[r + 1];
l++;
r++;
}
return res;
}
}