Menjinakkan Bom

Barbara Streisand
Barbara Streisandasal
2024-11-24 16:19:32514semak imbas

Defuse the Bomb

1652. Menjinakkan Bom

Kesukaran: Mudah

Topik: Tatasusunan, Tingkap Gelongsor

Anda mempunyai bom untuk dilemahkan, dan masa anda semakin suntuk! Pemberi maklumat anda akan memberikan anda bulatan kod tatasusunan dengan panjang n dan kunci k.

Untuk menyahsulit kod, anda mesti menggantikan setiap nombor. Semua nombor diganti secara serentak.

  • Jika k > 0, gantikan nombor ith dengan jumlah seterusnya nombor k.
  • Jika k < 0, gantikan nombor ith dengan jumlah nombor ksebelumnya.
  • Jika k == 0, gantikan nombor ike dengan 0.

Memandangkan kod adalah bulat, elemen kod seterusnya[n-1] ialah kod[0] dan elemen kod sebelumnya[0] ialah kod[n-1].

Memandangkan kod tatasusunan bulatan dan kunci integer k, kembalikan kod yang dinyahsulit untuk meredakan bom!

Contoh 1:

  • Input: kod = [5,7,1,4], k = 3
  • Output: [12,10,16,13]
  • Penjelasan: Setiap nombor digantikan dengan jumlah 3 nombor seterusnya. Kod yang dinyahsulit ialah [7 1 4, 1 4 5, 4 5 7, 5 7 1]. Perhatikan bahawa nombor itu membungkus.

Contoh 2:

  • Input: kod = [1,2,3,4], k = 0
  • Output: [0,0,0,0]
  • Penjelasan: Apabila k ialah sifar, nombor digantikan dengan 0.

Contoh 3:

  • Input: kod = [2,4,9,3], k = -2
  • Output: [12,5,6,13]
  • Penjelasan: Kod yang dinyahsulit ialah [3 9, 2 3, 4 2, 9 4]. Perhatikan bahawa nombor itu membungkus semula. Jika k adalah negatif, jumlahnya ialah nombor sebelumnya.

Kekangan:

  • n == kod.panjang
  • 1 <= n <= 100
  • 1 <= kod[i] <= 100
  • -(n - 1) <= k <= n - 1

Petunjuk:

  1. Memandangkan tatasusunan berbentuk bulat, gunakan modulo untuk mencari indeks yang betul.
  2. Kekangan cukup rendah untuk penyelesaian kekerasan.

Penyelesaian:

Kami boleh melaksanakan fungsi yang berulang ke atas tatasusunan kod dan mengira jumlah nombor yang sesuai berdasarkan nilai k.

Pendekatan umum adalah seperti berikut:

  1. Jika k == 0, gantikan semua elemen dengan 0.
  2. Jika k > 0, gantikan setiap elemen dengan jumlah unsur k seterusnya dalam tatasusunan bulat.
  3. Jika k < 0, gantikan setiap elemen dengan jumlah elemen k sebelumnya dalam tatasusunan bulat.

Sifat bulat tatasusunan bermaksud bahawa untuk indeks yang melebihi had tatasusunan, anda boleh menggunakan modulo (%) untuk "membungkus" tatasusunan.

Mari laksanakan penyelesaian ini dalam PHP: 1652. Menjinakkan Bom






Penjelasan:

  1. Permulaan:

    • Kami mencipta tatasusunan hasil yang dimulakan dengan sifar menggunakan array_fill.
  2. Pengendalian k == 0:

    • Jika k ialah sifar, tatasusunan output hanya diisi dengan sifar, seperti yang diperlukan oleh masalah.
  3. Lelaran Melalui Tatasusunan:

    • Untuk setiap indeks i dalam tatasusunan:
      • Jika k > 0, jumlahkan elemen k seterusnya menggunakan aritmetik modulo untuk dililitkan.
      • Jika k < 0, jumlahkan |k| sebelumnya elemen menggunakan aritmetik modulo dengan offset untuk mengendalikan indeks negatif.
  4. Modulo Aritmetik:

    • Kami menggunakan ($i $j) % $n untuk membungkus ke permulaan tatasusunan apabila mengakses indeks yang lebih besar daripada n - 1.
    • Begitu juga, ($i - $j $n) % $n mengendalikan pembalut ke belakang untuk indeks negatif.
  5. Kerumitan:

    • Kerumitan Masa: O(n . |k|), dengan n ialah saiz tatasusunan dan |k| ialah nilai mutlak bagi k.
    • Kerumitan Angkasa: O(n) untuk tatasusunan hasil.

Keluaran:

Contoh yang disediakan sepadan dengan hasil yang dijangkakan. Beritahu saya jika anda memerlukan penjelasan atau pengoptimuman lanjut!

Pautan Kenalan

Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!

Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:

  • LinkedIn
  • GitHub

Atas ialah kandungan terperinci Menjinakkan Bom. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn