当前位置: 首页 > news >正文

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

【每日一题】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] 前一个元素是 code[n-1]

给你循环数组 code 和整数密钥 k,请你返回解密后的结果来拆除炸弹!

思路分析

这个问题的关键在于理解如何通过循环数组和给定的密钥 k 来计算每个位置上的新值。我们可以按照以下步骤来解决这个问题:

  1. 首先,我们需要初始化一个与 code 数组同样长度的数组 ans 来存储最终的结果。
  2. 根据 k 的值,我们确定循环的半径。如果 k 是正数,我们只需要考虑后面的 k 个数字;如果 k 是负数,我们需要考虑前面的 k 个数字;如果 k0,则所有位置的值都设置为 0
  3. 我们使用一个变量 s 来存储当前位置的数字和,这个和是基于当前位置的数字以及它后面(或前面,取决于 k 的正负)的 k 个数字。
  4. 我们遍历数组 code,对于每个位置,我们更新 s 的值,将当前位置的数字替换为 s,然后将 s 更新为下一个位置的和。
  5. 最后,我们返回填充好的数组 ans

输入示例

  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]
    • 解释:当 k0 时,所有数字都被 0 替换。
  3. code = [2,4,9,3], k = -2

    • 输出:[12,5,6,13]
    • 解释:解密后的密码为 [3+9, 2+3, 4+2, 9+4]。如果 k 是负数,那么和为之前 的数字。

代码实现

class Solution {public int[] decrypt(int[] code, int k) {int n = code.length; // 数组长度int[] ans = new int[n]; // 初始化答案数组int r; // 循环的半径if (k > 0) {r = k + 1; // 如果 k 是正数,只考虑后面的 k 个数字} else {r = n; // 如果 k 是负数或 0,考虑整个数组}k = Math.abs(k); // 获取 k 的绝对值int s = 0; // 初始化当前位置的数字和// 计算初始的数字和for (int i = r - k - 1; i < r; i++) {s += code[i % n]; // 使用模运算确保索引不会超出数组范围}// 遍历数组,更新答案数组和数字和for (int i = 0; i < n; i++) {ans[i] = s; // 将当前位置的数字和赋值给答案数组s += code[(r + i) % n] - code[(r + i - k) % n]; // 更新数字和}return ans; // 返回解密后的结果}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [数据集][目标检测]轮胎检测数据集VOC+YOLO格式4629张1类别
  • Android架构组件中的MVVM应用
  • 进入docker的命令和docker命令的基础操作
  • python测试开发基础---线程和进程的概念
  • 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表
  • 【软件设计】常用设计模式--工厂模式
  • 经验笔记:DevOps
  • Linux 硬件学习 s3c2440 arm920t蜂鸣器
  • C语言深度剖析--不定期更新的第二弹
  • 基于视觉-语言模型的机器人任务规划:ViLaIn框架解析
  • Avalonia 动画和视觉效果详解
  • http、https、https原理
  • [详细建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级
  • Ubuntu上安装配置(jdk/tomcat/ufw防火墙/mysql)+mysql卸载
  • 2024国赛数学建模-模拟火算法(MATLAB 实现)
  • 【EOS】Cleos基础
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Cookie 在前端中的实践
  • ERLANG 网工修炼笔记 ---- UDP
  • go语言学习初探(一)
  • JavaScript类型识别
  • javascript数组去重/查找/插入/删除
  • node学习系列之简单文件上传
  • Vim Clutch | 面向脚踏板编程……
  • Vue UI框架库开发介绍
  • 坑!为什么View.startAnimation不起作用?
  • 悄悄地说一个bug
  • 山寨一个 Promise
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 消息队列系列二(IOT中消息队列的应用)
  • 一天一个设计模式之JS实现——适配器模式
  • 走向全栈之MongoDB的使用
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # Redis 入门到精通(九)-- 主从复制(1)
  • # 透过事物看本质的能力怎么培养?
  • ### RabbitMQ五种工作模式:
  • #pragma multi_compile #pragma shader_feature
  • (LeetCode 49)Anagrams
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (回溯) LeetCode 131. 分割回文串
  • (三)c52学习之旅-点亮LED灯
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)3D模板阴影原理
  • (转)h264中avc和flv数据的解析
  • .jks文件(JAVA KeyStore)
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖