滑动窗口,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;
    }
};
相关推荐
你撅嘴真丑4 小时前
第九章-数字三角形
算法
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder4 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮4 小时前
AI 视觉连载1:像素
算法
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥5 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风5 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風6 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT066 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠6 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法