首頁 >後端開發 >php教程 >拆除炸彈

拆除炸彈

Barbara Streisand
Barbara Streisand原創
2024-11-24 16:19:32513瀏覽

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