LeetCode 1652 拆炸弹[前缀和] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1652 拆炸弹[前缀和] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

解题思路

用前缀和存储数组中连续序列的和,然后根据k的正负进行循环,每种循环都要考虑范围只在一边和两边都有的情况,这里边界比较细节需要仔细推敲,代码如下:

代码

class Solution 
public:
    vector<int> decrypt(vector<int>& code, int k) 
        int n = code.size();
        vector<int> res(n, 0);
        if(k == 0) 
            return res;
        
        // 前缀和
        vector<int> prefix(n, code[0]);
        // 构造前缀和
        for(int i = 1; i < n; i ++) 
            prefix[i] = prefix[i - 1] + code[i];
        
        // 根据k的值判断
        if(k > 0) 
            for(int i = 0; i < n; i ++) 
                // 范围只在一边
                if(i + k < n) 
                    res[i] = prefix[i + k] - prefix[i];
                 else // 头尾范围都要加上
                    res[i] = prefix[n - 1] - prefix[i] + prefix[k - n + i];
                
            
         else 
            for(int i = 0; i < n; i ++) 
                // 范围只在一边
                if(i + k >= 0) 
                    res[i] = (i + k == 0) ? prefix[i - 1] : prefix[i - 1] - prefix[i + k - 1];
                 else // 头尾范围都要加上
                    res[i] = (i == 0 ? 0 : prefix[i - 1]) + prefix[n - 1] - prefix[n - 1 + k + i];
                
                cout << res[i] << endl;
            
        
        return res;
    
;

以上是关于LeetCode 1652 拆炸弹[前缀和] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ-1218激光炸弹 前缀和 + 枚举

二维前缀和之激光炸弹

Acwing 99 激光炸弹 (二维前缀和)

leetcode1652. Defuse the Bomb

二维前缀和例题-激光炸弹

Acwing-99-激光炸弹(二维前缀和)