3011。配列がソートできるかどうかを調べる
難易度: 中
トピック: 配列、ビット操作、ソート
正の 整数の 0 インデックス 配列が与えられます。
1 つの 操作で、同じ数の設定ビット1がある場合、任意の 2 つの隣接要素を交換できます。この操作は任意回(ゼロを含む)行うことができます。
配列をソートできる場合は true を返し、それ以外の場合は falseを返します。
例 1:
例 2:
例 3:
例 4:
制約:
ヒント:
解決策:
バイナリ表現で同じ数の設定ビットを持つ隣接する要素を交換するだけで配列をソートできるかどうかを判断する必要があります。計画は次のとおりです:
Key Observation: この操作により、設定されたビット数が同じである場合にのみ、隣接する要素を交換できます。これにより、設定ビット数が異なる要素間でのスワップが制限されます。
計画:
ステップ:
このソリューションを 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 を持つ数値の 2 進表現内のビットを指します。 ↩
以上が配列がソートできるかどうかを調べるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。