首页  >  文章  >  后端开发  >  拆除炸弹

拆除炸弹

Barbara Streisand
Barbara Streisand原创
2024-11-24 16:19:32452浏览

Defuse the Bomb

1652。拆除炸弹

难度:简单

主题:数组、滑动窗口

你有一颗炸弹需要拆除,你的时间已经不多了!你的告密者将为你提供一个循环长度为n的数组代码和一个密钥k。

要解密代码,您必须替换每个数字。所有数字同时被替换。

  • 如果 k > 0,将第 i 个数字替换为 下一个 k 个数字的总和。
  • 如果 k 第 个数字替换为 k 个数字的总和。
  • 如果 k == 0,则将第 i 个数字替换为 0。

由于code是循环的,code[n-1]的下一个元素是code[0],code[0]的前一个元素是code[n-1]。

给定循环数组代码和整数密钥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替换。

示例 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
  • 1
  • -(n - 1)

提示:

  1. 由于数组是循环的,请使用模来找到正确的索引。
  2. 对于暴力解决方案来说,约束足够低。

解决方案:

我们可以实现一个函数,迭代代码数组并根据 k 的值计算适当数字的总和。

一般方法如下:

  1. 如果 k == 0,则将所有元素替换为 0。
  2. 如果 k > 0,将每个元素替换为循环数组中接下来的 k 个元素的总和。
  3. 如果 k

数组的循环性质意味着对于超出数组边界的索引,您可以使用模 (%) 来“环绕”数组。

让我们用 PHP 实现这个解决方案:1652。拆除炸弹

<?php
/**
 * @param Integer[] $code
 * @param Integer $k
 * @return Integer[]
 */
function decrypt($code, $k) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example Usage
$code1 = [5, 7, 1, 4];
$k1 = 3;
print_r(decrypt($code1, $k1)); // Output: [12, 10, 16, 13]

$code2 = [1, 2, 3, 4];
$k2 = 0;
print_r(decrypt($code2, $k2)); // Output: [0, 0, 0, 0]

$code3 = [2, 4, 9, 3];
$k3 = -2;
print_r(decrypt($code3, $k3)); // Output: [12, 5, 6, 13]
?>

解释:

  1. 初始化:

    • 我们使用 array_fill 创建一个用零初始化的结果数组。
  2. 处理 k == 0:

    • 如果 k 为零,则按照问题的要求,输出数组将简单地用零填充。
  3. 迭代数组:

    • 对于数组中的每个索引 i:
      • 如果 k > 0,使用模算术对接下来的 k 个元素求和以进行环绕。
      • 如果 k
  4. 模算术:

    • 当访问大于 n - 1 的索引时,我们使用 ($i $j) % $n 回绕到数组的开头。
    • 类似地, ($i - $j $n) % $n 处理负索引的向后包装。
  5. 复杂性

    • 时间复杂度:O(n . |k|),其中 n 是数组的大小,|k| 是绝对值k
    • 空间复杂度:O(n) 结果数组。

输出:

提供的示例与预期结果相符。如果您需要进一步的解释或优化,请告诉我!

联系链接

如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!

如果您想要更多类似的有用内容,请随时关注我:

  • 领英
  • GitHub

以上是拆除炸弹的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn