爆弾を解除する

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 16:19:32514ブラウズ

Defuse the Bomb

1652年。爆弾を解除してください

難易度: 簡単

トピック: 配列、スライディング ウィンドウ

爆弾を解除する必要があるので、時間は残りわずかです!あなたの情報提供者は、長さ n とキー k の 円形 配列コードを提供します。

コードを復号化するには、すべての数字を置き換える必要があります。すべての数字は同時に置き換えられます。

  • もしkなら> 0、i番目の数値を次の k 個の数値の合計に置き換えます。
  • k 番目の数値を前の k 個の数値の合計に置き換えます。
  • k == 0 の場合、i 番目 の数値を 0 に置き換えます。

コードは循環しているため、code[n-1] の次の要素は code[0] であり、code[0] の前の要素は code[n-1] です。

円形配列コードと整数キー k を指定すると、爆弾を解除するための復号化されたコードを返します!

例 1:

  • 入力: コード = [5,7,1,4]、k = 3
  • 出力: [12,10,16,13]
  • 説明: 各数値は、次の 3 つの数値の合計に置き換えられます。復号化されたコードは [7 1 4, 1 4 5, 4 5 7, 5 7 1] です。数字が循環していることに注意してください。

例 2:

  • 入力: コード = [1,2,3,4]、k = 0
  • 出力: [0,0,0,0]
  • 説明: k が 0 の場合、数値は 0 に置き換えられます。

例 3:

  • 入力: コード = [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 が 0 の場合、問題の要求に応じて、出力配列は単純に 0 で埋められます。
  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 で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:

  • LinkedIn
  • GitHub

以上が爆弾を解除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。