算法笔记-lc-1652. 拆炸弹(简单)

汇编拆炸弹实验 拆炸弹实验实验报告 立即下载

@[TOC](算法笔记-lc-1652. 拆炸弹(简单))

题目

题干

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 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 ,请你返回解密后的结果来拆除炸弹!

示例

示例 1:

输入:code = [5,7,1,4], k = 3
输出:[12,10,16,13]
解释:每个数字都被接下来 3 个数字之和替换。解密后的密码为 [7+1+4, 1+4+5, 4+5+7, 5+7+1]。注意到数组是循环连接的。
示例 2:

输入:code = [1,2,3,4], k = 0
输出:[0,0,0,0]
解释:当 k 为 0 时,所有数字都被 0 替换。
示例 3:

输入:code = [2,4,9,3], k = -2
输出:[12,5,6,13]
解释:解密后的密码为 [3+9, 2+3, 4+2, 9+4] 。注意到数组是循环连接的。如果 k 是负数,那么和为 之前 的数字。

提示:

n == code.length
1 <= n <= 100
1 <= code[i] <= 100
-(n - 1) <= k <= n - 1

题解

方法一:滑动窗口

思路与算法

题目给定了一个长度为 n 的循环数组 code,和密钥 k,我们需要通过 code 和 k 来计算正确的密码:

当 k=0 时:对于原数组中的每一个数需要用 00 来替代。
当 k>0 时:对于原数组中的每一个数用该数之后的连续 kk 的数字来替代。
当 k<0 时:对于原数组中的每一个数用该数之前的连续 kk 的数字来替代。
当 k=0 时将code 中元素全部置零返回即可。
当k !=0 时:为了说明和编码方便,我们将原数组进行拼接操作code=code+code,并记 code[i,j] 表示区间[code i ,code i+1 ,⋯,code j ]。然后我们用 li,i来对应 \textit{code}[i]code[i] 解密需要的数组区间的左右端点,此时对于∀i∈[0,n) 有 l i+1=l i+1 ,r_i + 1 = r_{i + 1}ri +1=r i+1 成立,那么我们只需要在从左往右遍历的过程中维护code[l i​,r i ] 的和即可。如果不进行拼接,我们也仅需要在维护区间端点时进行取模映射操作,即l i+1 =(li+1)(modn),r i+1 =(ri​ +1)(modn),使空间复杂度降到 O(1)。
代码

class Solution {
    public int[] decrypt(int[] code, int k) {
        int n = code.length;
        if (k == 0) {
            return new int[n];
        }
        int[] res = new int[n];
        int[] newCode = new int[n * 2];
        System.arraycopy(code, 0, newCode, 0, n);
        System.arraycopy(code, 0, newCode, n, n);
        code = newCode;
        int l = k > 0 ? 1 : n + k;
        int r = k > 0 ? k : n - 1;
        int w = 0;
        for (int i = l; i <= r; i++) {
            w += code[i];
        }
        for (int i = 0; i < n; i++) {
            res[i] = w;
            w -= code[l];
            w += code[r + 1];
            l++;
            r++;
        }
        return res;
    }
}

复杂度分析

时间复杂度:O(n),其中 n 为数组 code 的长度。
空间复杂度:O(n),其中 n 为数组 code 的长度,主要为数组拼接后的空间开销,也可以通过取模映射操作来将空间复杂度降到 O(1)。

华为星闪SLE实战:手把手教你用HarmonyOS开发智能家居控制应用(附完整代码) 本文详细介绍了如何利用华为星闪SLE技术,结合HarmonyOS开发智能家居控制应用。通过对比传统无线技术,阐述了星闪SLE在低时延、高可靠性和高并发方面的优势,并提供了从环境搭建、设备发现、连接管理到核心控制代码的完整实战教程,帮助开发者快速上手这一无线短距通信技术。 阅读详情

相关推荐

从Podfile到分享成功:ShareSDK小红书模块集成全流程实战(附视频分享代码)

本文详细介绍了iOS应用如何通过ShareSDK集成小红书分享功能的全流程,包括环境配置、SDK初始化、图片和视频分享实现,以及常见问题排查和性能优化策略。特别针对视频分享这一高频需求场景,提供了完整的代码示例和实战技巧,帮助开发者快速实现社交分享功能。

weixin_42540248的博客 226

1652. 拆炸弹

要求 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。 如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。 如果 k == 0 ,将第 i 个数字用 0 替换。 由于 code 是循环的, code[n-1] 下一个元素是 code[0] ,且 code[0] 前一个元素是

超级小四 555

非标准包 game.rgss3a 的打开方法 | 2023 年实测

生活笔记

陌雨’的博客 1万+

拆炸弹算法

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k。为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。如果 k == 0 ,将第 i 个数字用 0 替换。

Tammytt的博客 772

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

即插即用系列(代码实践) | WACV 2024 CSAM:面向各向异性医学图像分割的 2.5D 跨切片注意力模块

文章摘要: 论文《CSAM: A 2.5D Cross-Slice Attention Module for Anisotropic Volumetric Medical Image Segmentation》提出了一种解决医学图像各向异性问题的创新模块CSAM。针对MRI/CT数据中切片间分辨率差异大的挑战,该模块通过2.5D跨切片注意力机制,结合2D卷积的轻量性和3D上下文感知能力。核心包括语义注意力(通道级)、位置注意力(空间级)和跨切片注意力(支持不确定性建模),能在几乎不增加参数量的情况下有效捕捉

分享顶会顶刊论文即插即用模块 104

【每日一题】LeetCode 1652.拆炸弹(数组、滑动窗口)

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为n的循环数组code以及一个密钥k。为了获得正确的密码,你需要替换掉每一个数字。其实这是一个LeetCode上的题目,运用滑窗即可解决,一起来拆炸弹吧!!!

Hanbuhuic的博客 603

(12)单相降压自耦变压器的等效电路和仿真模型

本文根据电机学基本原理,从单相双绕组变压器的接线方式出发,建立基本方程并导出T型等效电路。然后将双绕组变压器演变成一种降压自耦变压器,详细地建立起单相降压自耦变压器的数学模型以及导出相对应的等效电路,最后用Matlab/simulink的simscape元件库元件建立了基于单相自耦变压器的T型等效电路的仿真模型。用实例仿真验证了本文工作的正确性。

weixin_45670943的博客 1046

Java基础知识(四)

一、Random的使用 使用步骤 1.导包 import java.util.Random; 2.创建对象 random r= new Random(); 3.获取随机数 int num=r.nextInt(100);——产生的数字在0—100之间,包括0,不包括100 二、数组 定义:数组是存储同一种数据类型多个元素的容器,既可以存储基本数据类型,也可以存储引用数据类型。 格式: 1.数据类型...

weixin_44730578的博客 355

RK3568平台(camera篇) mipi csi接口

MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。MIPI是差分串口传输,速度快,抗干扰。主流手机模组现在都是用MIPI传输,传输时使用4对差分信号传输图像数据和一对差分时钟信号;MIPI摄像头有三个电源:VDDIO(IO电源),AVDD(模拟电源),DVDD(内核数字电源),不同sensor模组的摄像头供电不同。

weixin_49303682的博客 5345

智慧社区:安防系统解决方案

智慧社区:安防系统解决方案

s13166803785的博客 431

JAVA学习笔记

目录 多态 instanceof关键字 内部类 成员内部类 静态内部类 局部内部类 匿名内部类 异常 String类 两个字符串连接的方法 charAt() String() equals () startsWith(String s) endsWith(String s) ​ regionMatches() compareTo() 正则表达式 验证 替换...

博客 2277

python:实现矩阵SVD分解(附完整源码)

python:实现矩阵SVD分解(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 603

LC.1652 拆炸弹

本文提出了两种滑动窗口方法解决LC1652拆炸弹问题。第一种方法通过确定窗口左端点,正k时从1开始,负k时从n+k开始,计算初始窗口和后继窗口的差值。第二种方法类似但跟踪右端点,正k时右端点为k+1,负k时为n。两种方案都使用滑动窗口技术,通过循环移动窗口并更新和值来避免重复计算,时间复杂度均为O(n),空间复杂度O(1)。核心在于正确处理k的正负情况和窗口边界条件。

2403_87884412的博客 208

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Leetcode及其他算法刷题记录

Leetcode视频题解地址https://space.bilibili.com/18508846 目前逐步添加视频题解中 欢迎大家点赞收藏 留言 投币 一键三连 hh N皇后系列26 27 28 30 31 32 33 35 38 39 40 41 42 45 程序员面试金典 https://www.nowcoder.com/ta/huawei 华为 机试试题 LC1288 LC005 LC003 LC77 LC1239 LC1197 LC1288 LC1255 LC1262 L...

stecdeng的专栏 387

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

第三篇JAVA核心技术复习

这是很难做出判断的。针对这种情况,Java中允许在方法的后面使用throws关键字对外声明该方法有可能发生的异常,这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。>表中,列出了Random类常用的方法,其中,Random类的nextDouble()方法返回的是0.0和1.0之间double类型的值,nextFloat()方法返回的是0.0和1.0之间float类型的值,nextlnt(intn)返回的是0(包括)和指定值n(不包括)之间的值。

snowman_tunan的博客 207

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

详解Java数组的四种拷贝方式

拷贝方式数值类型引用类型推荐使用for循环深拷贝浅拷贝copyof深拷贝浅拷贝√arraycopy深拷贝浅拷贝√clone深拷贝浅拷贝由于arraycopy底层是C++写的,所以速度快,更多的是使用这个方法。注意:本文中所有的引用数据类型都是以类的对象为例,使用的是对象数组,我们也知道引用类型包括类,接口,字符串等等。

glenshappy的专栏 1737

取余运算

取余运算 问题描述: 输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整形数。 【输入样例】mod.in 2 10 9 【输出样例】mod.out 2^10 mod 9=7 【算法分析】 本题主要的难点在于数据规模很大(b,p都是长整型数),对于b^p显然不能死算,那样的话时间复杂度和编程复杂度都很大。 //取余运算 #include<iostream> #inc...

Summer_Xin的博客 1665

数组复制的方法

是一个用于数组复制的方法。它将源数组(src)的一部分元素复制到目标数组(dest)的指定位置。

weixin_49376487的博客 338

java教材笔记第五章Java中的常用类

java教材笔记第五章Java中的常用类

a__999的博客 344

System类详解

1.System类:系统类,主要用于获取系统的属性数据,没有构造方法。2.System类常用的方法:(1) arraycopy(Object src, int srcPos, Object dest, int destPos, int length); ①参数详解:      src:原数组。    srcPos:原数组中的起始位置,也就是从原数组的哪一位开始拷贝。    dest:目标数组。 ...

大同小后生伟的博客 7307

Java方法之--System.arraycopy方法和Arrays.copyOf()

System.arraycopy方法:如果是数组比较大,那么使用System.arraycopy会比较有优势,因为其使用的是内存复制,省去了大量的数组寻址访问等时间 public static native void arraycopy(Object src, int srcPos, Object dest,

ChangWen的博客 3万+

LeetCode——1652. 拆炸弹

题目描述: 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。 如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。 如果 k == 0 ,将第 i 个数字用 0 替换。 由于 code 是循环的, code[n-1] 下一个元素是 code[0] ,且 code[0] 前一个元素是

FYPPPP的博客 566

LeetCode 1652. 拆炸弹(前缀和)

文章目录1. 题目2. 解题 1. 题目 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 ,将第 i 个数字用 接下来 k 个数字之和替换。 如果 k < 0 ,将第 i 个数字用 之前 k 个数字之和替换。 如果 k == 0 ,将第 i 个数字用 0 替换。 由于 code 是循环的, code[n-1] 下一个元素是 code[0]

Michael是个半路程序员 843

作业21:拆炸弹

(very very暴力) 题目: 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为n的循环数组code以及一个密钥k。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会同时被替换。 如果k > 0,将第i个数字用 接下来k个数字之和替换。 如果k < 0,将第i个数字用 之前k个数字之和替换。 如果k == 0,将第i个数字用0替换。 由于code是循环的,code[n-1]下一个元素是code[0],...

weixin_51696983的博客 389

每日一题day7-1652. 拆炸弹

你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 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] 。给你

kangbin825的专栏 295
上一篇: 算法笔记-lc-707. 设计链表(中等)
下一篇: 算法笔记-lc-788. 旋转数字(中等)
Hell_potato777
博客等级 码龄6年 47粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值