滑动窗口,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;
    }
};
相关推荐
KaMeidebaby17 分钟前
卡梅德生物技术快报|Western Blot 实验应用:肺肠轴机制研究全流程技术解析
前端·数据库·人工智能·算法·百度
AhriProGramming26 分钟前
计算机科普故事会-<2>见微知著
算法
BD4SXV1 小时前
线性二次调节器(Linear Quadratic Regulator,LQR)的无限时域最优控制求解与黎卡提方程
算法·自动化
ST——Jess1 小时前
2026年度传统文化数字化与命理科技(Ethno-tech)行业趋势研究报告:专业级数智工作台的技术壁垒与评测标准
人工智能·科技·算法·架构
Matrix_111 小时前
第13篇:非线性位移场——漩涡、鱼眼、水波纹与球面化
图像处理·算法
金牌归来发现妻女流落街头1 小时前
【LeetCode 第207题】
算法·leetcode·拓扑·领接表
熬夜敲代码的猫2 小时前
AVL树(C++详解版)
数据结构·c++·算法
-To be number.wan2 小时前
算法日记 | STL-MAP
c++·算法
cjp5602 小时前
015. UG 二次开发,拉伸草图生成实体类,高级草图类封装
算法
Eric 辰东2 小时前
【C 语言程序的编译和链接】详解编译链接过程
c语言·笔记·算法·学习方法