LeetCode 1652. Defuse the Bomb

32 阅读1分钟

🔗 leetcode.com/problems/de…

题目

  • 给一个环形数组 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;
        
    }
};