Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penamat Tatasusunan Minimum

Penamat Tatasusunan Minimum

Linda Hamilton
Linda Hamiltonasal
2024-11-14 11:45:02296semak imbas

Minimum Array End

3133. Penamat Tatasusunan Minimum

Kesukaran: Sederhana

Topik: Manipulasi Bit

Anda diberi dua integer n dan x. Anda perlu membina tatasusunan positif nombor integer saiz n di mana untuk setiap 0 <= i < n - 1, nums[i 1] ialah lebih besar daripada nums[i], dan hasil operasi bitwise AND antara semua elemen nums ialah x.

Kembalikan nilai minimum yang mungkin bagi nombor[n - 1].

Contoh 1:

  • Input: n = 3, x = 4
  • Output: 6
  • Penjelasan: nombor boleh menjadi [4,5,6] dan elemen terakhirnya ialah 6.

Contoh 2:

  • Input: n = 2, x = 7
  • Output: 15
  • Penjelasan: nombor boleh menjadi [7,15] dan elemen terakhirnya ialah 15.

Contoh 3:

  • Input: kos = [[2, 5, 1], [3, 4, 7], [8, 1, 2], [6, 2, 4], [3, 8, 8] ]
  • Output: 10

Kekangan:

  • 1 <= n, x <= 108

Petunjuk:

  1. Setiap elemen tatasusunan hendaklah diperoleh dengan “mencantumkan” x dan v dengan v = 0, 1, 2, …(n - 1).
  2. Untuk menggabungkan x dengan nombor v yang lain, pastikan bit set x tidak disentuh, untuk semua bit lain, isikan bit set v dari kanan ke kiri mengikut urutan satu demi satu.
  3. Jadi jawapan akhir ialah “gabungan” bagi x dan n - 1.

Penyelesaian:

Kita perlu membina nombor tatasusunan bilangan bulat positif saiz n, di mana setiap elemen berturut-turut adalah lebih besar daripada sebelumnya. Bitwise AND semua elemen dalam nums harus menghasilkan x. Kami diminta untuk mencari nilai minimum yang mungkin bagi nums[n-1].

Berikut ialah pecahan:

  1. Bit Manipulation Insight: Kita boleh perhatikan bahawa nums[i] harus dibina dengan menggabungkan x dengan integer 0, 1, ..., n-1. Ini akan membantu memastikan hasil bitwise AND menghasilkan x kerana kita bermula dengan asas x.

  2. Membina Elemen Tatasusunan: Setiap elemen boleh dianggap sebagai x digabungkan dengan beberapa integer, dan kami menyasarkan untuk mengekalkan bit x utuh. Kami mengisi bit tambahan daripada integer untuk mendapatkan nombor yang semakin meningkat sambil mengekalkan hasil AND sebagai x.

  3. Strategi Penggabungan: Untuk mencari nombor minimum[n-1], kita hanya perlu menggabungkan x dengan n-1. Penggabungan dalam konteks ini bermakna jika sebarang bit dalam x ialah 1, ia kekal 1. Kami menggunakan bit daripada n-1 untuk menambah sebarang bit tambahan yang diperlukan tanpa mengubah bit yang ditetapkan dalam x.

Mari laksanakan penyelesaian ini dalam PHP: 3133. Penamat Tatasusunan Minimum






Explication:

  1. Vérification et réglage des bits :

    • On vérifie chaque bit de ans (en partant de x), et si un bit vaut 0 dans ans, on regarde le bit correspondant dans k (qui est n-1).
    • Si ce bit dans k est 1, nous définissons le bit dans ans sur 1. Ce processus garantit l'incrément de valeur minimum tout en préservant les bits définis dans x.
  2. Contraintes de boucle :

    • Nous parcourons chaque position de bit jusqu'à un maximum calculé (kMaxBit), en nous assurant de couvrir les bits nécessaires à la fois de x et de n.
  3. Résultat :

    • La valeur finale de ans est la valeur minimale possible pour nums[n-1] qui satisfait aux conditions.

Complexité:

  • L'algorithme fonctionne en temps constant puisque le nombre de bits de tout entier dans cette plage est limité par 32, ce qui rend cette approche efficace même pour les grandes valeurs de n et x.

Cette solution donne les nombres minimum souhaités[n-1] tout en conservant les propriétés requises.

Liens de contact

Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !

Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :

  • LinkedIn
  • GitHub

Atas ialah kandungan terperinci Penamat Tatasusunan Minimum. 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