算法笔记-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)。

基于51单片机的电压表【0-20V,ADC0832,4051,自动量程】(仿真) 自动换挡式数字电压表就是一个基于单片机的能自动切换量程的数字电压表,其作用是在使用低位的AD转换实现高精度电压测量,可以测量0~20V的电压,并且具有0~0.2V(待测电玉低于0.2V时),0~2V(待测电压低于2V时)和0~20V三个量程自动匹配测量,当待测电压值发生变化时,电压表可以根据输入电压情况自动选择合适的量程进行测量,并且把测量结果显示出来。(2)实现电压表精度测试,最高精度要求0.01V;(1)实现0~20V分3档式电压表; 阅读详情

相关推荐

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2130

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

ABAQUS地应力平衡方法详解

在岩土工程数值分析中,首先要对模型进行初始地应力平衡计算。ABAQUS有限元软件有五种初始地应力平衡方法:①自动平衡法;②关键字定义初始地应力法(或在界面操作);③ODB导入法;④初始应力提取法;⑤用户子程序SIGNI法。由于第五种方法需要一定的编程基础,操作起来太复杂不易掌握,故本文只讲解较为实用的前四种平衡方法。 地应力平衡的目标:使土层在自重作用下的变形很小----不存在初始位移,只存在初始应力。一般情况下,最大位移达到10-4次幂以下就可以了。 ①自动平衡法 (如果土体采用线弹性,且比较规则,

m0_69808458的博客 3万+

拆炸弹算法

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

Tammytt的博客 772

均匀分布产生高斯分布

均匀分布产生高斯分布 文章目录均匀分布产生高斯分布简介方法和证明代码效果引用 简介 方法和证明 代码 效果 引用

gy_Rick的博客 5317

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4690

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

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

Hanbuhuic的博客 603

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐,业界广告推荐技术最新进展

推荐算法其实本质上是一种信息处理逻辑,当获取了用户与内容的信息之后,按照一定的逻辑处理信息后,产生推荐结果。热度排行榜就是最简单的一种推荐方法,它依赖的逻辑就是当一个内容被大多数用户喜欢,那大概率其他用户也会喜欢。但是基于粗放的推荐往往会不够精确,想要挖掘用户个性化的,小众化的兴趣,需要制定复杂的规则运算逻辑,并由机器完成。召回:当用户以及内容量比较大的时候,往往先通过召回策略,将百万量级的内容先缩小到百量级。

丨汀、的博客 7591

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

k8s 不同node之间pod ip不通

底层k8s使用calico网络,ipip网络模式,kubevirt启动了2台虚拟机;在这两台虚拟机上再搭建k8s,calico网络,ipip网络模式。说明:我是使用helm安装的calico,改这个模式要改crd资源ippools。其他方式安装的calico修改方法可能不一样。在虚拟机上的k8s上启动了2个pod,分布在不同的node上,这两个pod不能ping通对方的pod ip。修改虚拟机之上的k8s集群的calico网络的ipipMode为Never即可,之前使用的是Always。

weixin_40548182的博客 4056

Sqlserver2012评估期已过问题解决(启动数据库服务报错1705都是同样的问题,数据库过期未激活)

一、背景: 因为之前安装sqlserver2012忘记输入序列号,如今出现评估期已过的问题,前几天忙活半天,才解决,发现网 上叙述都非常凌乱,并且仅仅有大意,有的非常难操作。所以把我操作的过程和大家交流分享: 一定要有序列号的输入。不然会有很多其它的麻烦出现: 二、问题解决: 第一步:进入SQL2012配置工具中的安装中心。 第二步:再进入左側维护选项界面,然后选择选择版本号升级。 ...

堂前燕的博客 3265

JAVA学习笔记

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

博客 2277

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

master_hunter的博客 8933

LC.1652 拆炸弹

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

2403_87884412的博客 208

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

第三篇JAVA核心技术复习

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

snowman_tunan的博客 207

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

详解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、付费专栏及课程。

余额充值