题目
-
给一个环形数组 nums,即元素首尾相连,和一个数字 k
-
对每一个 nums 中的元素进行加密
- 如果 k > 0 ,替换为后续 k 个元素的和
- 如果 k < 0,替换为前 k 个元素的和
- 如果为 0, 替换为 0
思路
- 模拟
代码
class Solution {
public:
vector<int> decrypt(vector<int>& code, int k) {
int n = code.size();
vector<int> ans;
int next_sum = 0, previous_sum = 0;
if (k > 0) {
for (int i = 1; i <= k; i++) {
next_sum += code[i];
}
}
if (k < 0) {
for (int i = 1; i <= -k; i++) {
previous_sum += code[n-i];
}
}
for (int i = 0; i < code.size(); i++) {
if (k > 0) {
ans.push_back(next_sum);
next_sum = next_sum - code[(i+1)%n] + code[(i+1+ k)%n];
} else if (k < 0) {
ans.push_back(previous_sum);
previous_sum = previous_sum + code[i] - code[(i + k+n)%n];
} else {
ans.push_back(0);
}
}
return ans;
}
};