3011。判斷數組是否可以排序
難度:中
主題:陣列、位元操作、排序
給你一個0索引數組,其中正整數nums。
在一次操作中,您可以交換任兩個相鄰元素,如果它們具有相同個設定位1 。您可以執行此操作任意次(包括零)。
如果可以對陣列進行排序,則傳回 true,否則傳回 false.
範例1:
範例2:
範例 3:
範例 4:
約束:
提示:
解:
我們需要確定是否可以透過僅交換二進位表示中具有相同數量的設定位的相鄰元素來對數組進行排序。計劃如下:
關鍵觀察:該操作允許我們僅在相鄰元素具有相同數量的設定位數時交換它們。這限制了具有不同設定位數的元素之間的交換。
計畫:
步驟:
讓我們用 PHP 實作這個解:3011。判斷數組是否可以排序
<?php /** * Helper function to count set bits in a number * * @param $n * @return int */ function countSetBits($n) { ... ... ... /** * go to ./solution.php */ } /** * @param Integer[] $nums * @return Boolean */ function canSortArray($nums) { ... ... ... /** * go to ./solution.php */ } // Test cases $nums1 = [8, 4, 2, 30, 15]; $nums2 = [1, 2, 3, 4, 5]; $nums3 = [3, 16, 8, 4, 2]; $nums4 = [75, 34, 30]; echo canBeSorted($nums1) ? 'true' : 'false'; // Expected output: true echo "\n"; echo canBeSorted($nums2) ? 'true' : 'false'; // Expected output: true echo "\n"; echo canBeSorted($nums3) ? 'true' : 'false'; // Expected output: false echo "\n"; echo canBeSorted($nums4) ? 'true' : 'false'; // Expected output: false ?>
排序與重建:
最終比較:將重建的陣列與完全排序版本的 nums 進行比較。如果匹配,則傳回true;否則,傳回 false。
此解決方案確保我們僅交換具有相同設定位數的相鄰元素,如果可能的話實現排序順序。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
設定位元 設定位元是指數字的二進位表示形式中值為 1 的位元。 ↩
以上是判斷數組是否可以排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!