滑动窗口,LeetCode 1652. 拆炸弹

目录

一、题目

1、题目描述

2、接口描述

python3

cpp

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解

python3

cpp


一、题目

1、题目描述

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n循环 数组 code 以及一个密钥 k

为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。

  • 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。
  • 如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。
  • 如果 k == 0 ,将第 i 个数字用 0 替换。

由于 code 是循环的, code[n-1] 下一个元素是 code[0] ,且 code[0] 前一个元素是 code[n-1]

给你 循环 数组 code 和整数密钥 k ,请你返回解密后的结果来拆除炸弹!

2、接口描述

python3
复制代码
python 复制代码
class Solution:
    def decrypt(self, code: List[int], k: int) -> List[int]:
cpp
复制代码
cpp 复制代码
class Solution {
public:
    vector<int> decrypt(vector<int>& code, int k) {

    }
};

3、原题链接

1652. 拆炸弹


二、解题报告

1、思路分析

对于环形问题往往只需要对下标取模就可以解决

我们考虑维护长度为k的滑窗不断滑动,维护滑窗内的和,完成n个元素的计算

2、复杂度

时间复杂度: O(n)空间复杂度:O(1)

3、代码详解

python3
复制代码
python 复制代码
class Solution:
    def decrypt(self, code: List[int], k: int) -> List[int]:
        n = len(code)
        r = k + 1 if k > 0 else n
        k = abs(k)
        s = sum(code[r - k: r])
        ret = [0] * n
        for i in range(n):
            ret[i] = s
            s += code[r % n] - code[(r - k) % n]
            r += 1
        return ret
cpp
复制代码
cpp 复制代码
class Solution {
public:
    vector<int> decrypt(vector<int>& code, int k) {
        int n = code.size();
        int r = k > 0 ? k + 1 : n;
        k = abs(k);
        int s = accumulate(code.begin() + r - k, code.begin() + r, 0);
        vector<int> ret(n);
        for(int i = 0; i < n; i ++){
            ret[i] = s;
            s += code[r % n] - code[(r - k) % n];
            r ++;
        }
        return ret;
    }
};
相关推荐
BingLin-Liu29 分钟前
蓝桥杯备考:递归初阶
职场和发展·蓝桥杯
IT猿手37 分钟前
2025高维多目标优化:基于导航变量的多目标粒子群优化算法(NMOPSO)的无人机三维路径规划,MATLAB代码
开发语言·人工智能·算法·机器学习·matlab·无人机·cocos2d
阿乾之铭1 小时前
动态规划算法
算法·动态规划
菠菠萝宝1 小时前
【代码随想录】第九章-动态规划(上)
算法·动态规划·01背包·完全背包·多重背包·上楼梯
DTDanteDong1 小时前
从头再来!社招找工作——算法题复习九:动态规划
算法·动态规划
Coco_92641 小时前
Hot100 动态规划
算法·动态规划
卑微的小鬼1 小时前
golang的var ,make ,new, := 的区别
算法
01_2 小时前
力扣hot100 ——和为k的子数组 前后缀和(积)各种情况总结
数据结构·算法·leetcode·前后缀和(积)计算
一只码代码的章鱼2 小时前
数据结构与算法-搜索-双向搜索 和 A*算法(字串变换,八数码,第k短路)
算法
咚咚轩2 小时前
算法1-2 排序(快排)
算法