题目

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

示例

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/defuse-the-bomb
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:模拟

Java实现
class Solution {public int[] decrypt(int[] code, int k) {int n = code.length;int[] ans = new int[n];for (int i = 0; i < n; i++) {if (k > 0) {int sum = 0;for (int j = 1; j <= k; j++) {sum += code[(i + j) % n];}ans[i] = sum;} else if (k < 0) {int sum = 0;for (int j = 1; j <= Math.abs(k); j++) {sum += code[(i - j + n) % n];}ans[i] = sum;} else {ans[i] = 0;}}return ans;}
}

方法2:滑动窗口

⭐题解:https://leetcode.cn/problems/defuse-the-bomb/solution/-by-muse-77-w6yd/

Java实现
class Solution {public int[] decrypt(int[] code, int k) {int n = code.length;int[] res = new int[n];if (k == 0) return res;int sum = 0, count = Math.abs(k), head = k > 0 ? 0 : n - 1, tail = k > 0 ? 1 : 0;while (count-- > 0) {if (k > 0) {head = (head + 1) % n;sum += code[head];} else {tail = (tail - 1 + n) % n;sum += code[tail];}}res[0] = sum;for (int i = 1; i < n; i++) {head++;res[i] = sum + code[head % n] - code[tail];sum = res[i];tail++;tail = tail % n;}return res;}
}

力扣 1652. 拆炸弹相关推荐

  1. 【LeetCode】1652. 拆炸弹(C++)

    1652. 拆炸弹(C++) 1 题目描述 2 示例描述 2.1 示例1 2.2 示例2 2.3 示例3 3 解题提示 4 解题思路 5 源码详解(C++) 1 题目描述 你有一个炸弹需要拆除,时间紧 ...

  2. LeetCode 1652. 拆炸弹(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k . 为了获得正确的密码,你需要替换掉每一个数字 ...

  3. 【1652. 拆炸弹】

    来源:力扣(LeetCode) 描述: 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k . 为了获得正确的密码,你需要替换掉每一个数字.所有 ...

  4. LeetCode简单题之拆炸弹

    题目 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k . 为了获得正确的密码,你需要替换掉每一个数字.所有数字会 同时 被替换. 如果 k ...

  5. 力扣解法汇总838-推多米诺

    原题链接:力扣 描述: n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立.在开始时,同时把一些多米诺骨牌向左或向右推. 每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌.同样地,倒向右边的 ...

  6. 力扣772 基本计算器 III

    772. 基本计算器 III 实现一个基本的计算器来计算简单的表达式字符串. 表达式字符串只包含非负整数,算符 +.-.*./ ,左括号 ( 和右括号 ) .整数除法需要 向下截断 . 你可以假定给定 ...

  7. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  8. 力扣LeetCode(二)T41-T80

    文章目录 41.缺失的第一个正数 42.接雨水 43.字符串相乘 44.通配符匹配 45.跳跃游戏 II (贪心) 46.全排列(两种模板) 47.全排列 II(序列不重模板) 48.旋转图像 49. ...

  9. 滑动窗口算法框架(Java版)秒杀力扣题(76、567、438、3、485)

    一.声明 1.非常感谢东哥(labuladong)分享了**滑动窗口算法框架**: 2.我在理解了东哥的思想后,用Java实现了滑动窗口算法框架,一来方便自己学习,二来方便一些Java小伙伴: 3.再 ...

最新文章

  1. wordpress php 7 速度优化,WordPress优化提速必做的6种操作代码篇
  2. Express框架(http服务器 + 路由)
  3. poj2392 Space Elevator
  4. 【渝粤教育】 国家开放大学2020年春季 1129土木工程力学(本) 参考试题
  5. Hibernate第十一篇【配置C3P0数据库连接池、线程Session】
  6. PHP——0128练习相关1——window.open()
  7. 2019春第八周作业
  8. D3、EChart、HighChart绘图demol
  9. python教程推荐-入门python有什么好的书籍推荐?
  10. jupyter notebook python3路径_详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式...
  11. Gstreamer之gst-plugin-bad交叉编译集成x265(二十二)
  12. 微信小程序调出选择好友聊天窗口
  13. 图像分割并存储 matlab,用于面积增长的Matlab图像分割程序
  14. UCOS操作系统——任务内嵌信号量(十一)
  15. Halcon contour相关操作
  16. 2021-06-08实验室如何正确选择和确认检测方法?
  17. 微信小程序隐藏tabBar
  18. python制作qq登录界面_用Python实现一个最新QQ办公版(TIM)的登录界面
  19. 通过数据分析改进并达成SEO优化目标
  20. 车载 DCAC 电源模块

热门文章

  1. 使用智能指针错误导致内存泄漏_C++智能指针使用的那些事
  2. 【Android 小功能】双击返回键返回桌面(进入后台),再次进入不加载启动页,物理键双击退回桌面
  3. 最强赛亚人服务器维护,龙珠最强赛亚人手游正式版-龙珠最强赛亚人游戏最新特别版v2.0预约-日历表...
  4. 升级Xcode7发现的一些问题和解决方案
  5. Android系统(MT6797)CPU频率工作模式以及调整频率的方法
  6. 机器人军团防护罩_《复联3》瓦坎达防御暴露致命缺陷,钢铁侠军团可以轻松突破!...
  7. UE4中如何播放全景视频/全景视频如何在VR设备中播放
  8. 那些优秀的开源系统恢复软件
  9. 360网页如何扩展html5,360安全浏览器如何添加扩展
  10. 20190220《前赤壁赋---苏轼》