leetcode1356. 根據數字二進位制下 1 的數目排序
題目描述:
給你一個整數陣列 arr 。請你將陣列中的元素按照其二進位制表示中數字 1 的數目升序排序。
如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小升序排列。
請你返回排序後的陣列。
輸入:arr = [0,1,2,3,4,5,6,7,8]
輸出:[0,1,2,4,8,3,5,6,7]
解釋:[0] 是唯一一個有 0 個 1 的數。
[1,2,4,8] 都有 1 個 1 。
[3,5,6] 有 2 個 1 。
[7] 有 3 個 1 。
按照 1 的個數排序得到的結果陣列為 [0,1,2,4,8,3,5,6,7]
輸入:arr = [2,3,5,7,11,13,17,19]
輸出:[2,3,5,17,7,11,13,19]
提示:
1 <= arr.length <= 500
0 <= arr[i] <= 10^4
程式碼:
public class Day25 {
// 只要呼叫系統自帶的排序函式
public static int[] sortByBits(int[] arr) {
int[] bit = new int[10001]; // 0 <= arr[i] <= 10^4
List<Integer> list = new ArrayList<>();
for(int x : arr){
list.add(x);
bit[x] = convert(x); // 轉化為二進位制儲存,i是原陣列的值的大小,按原數值的大小進行排序
}
// 接下來排序二進位制的大小
list.sort((x, y) -> {
if (bit[x] != bit[y]) {
return bit[x] - bit[y];
} else {
return x - y;
}
});
for (int i = 0; i < arr.length; i++) {
arr[i] = list.get(i);
}
return arr;
}
public static int convert(int x){
int res = 0;
while(x != 0){
res += x % 2;
x /= 2;
}
return res;
}
public static void main(String[] args) {
// Day25 day = new Day25();
int[] arr = {1024,512,256,128,64,32,16,8,4,2,1};
int[] lastarr = sortByBits(arr);
for (int i = 0; i < lastarr.length; i++) {
System.out.println(lastarr[i]);
}
}
}
//時間複雜度:O(nlogn),其中 n 為整數陣列 arr 的長度。
//空間複雜度:O(n),其中 n 為整數陣列 arr 的長度。
相關文章
- 根據數字二進位制下 1 的數目排序排序
- 力扣 根據數字二進位制下1的數目排序力扣排序
- leetcode-1356. 根據數字二進位制下 1 的數目排序LeetCode排序
- leetcode.1356. 根據數字二進位制下 1 的數目排序LeetCode排序
- 力扣1356.根據數字二進位制下1的數目排序力扣排序
- 二進位制中1的個數
- 二維陣列根據欄位進行排序陣列排序
- SpringJpa @query 中根據傳入引數(欄位)排序Spring排序
- 根據介面返回的二進位制流匯出檔案
- 頁面顯示二進位制數原始據亂碼
- 負數的二進位制數問題
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 【劍指offer】二進位制中1的個數
- JZ-011-二進位制中 1 的個數
- 1417 二進位制數的大小
- 輸出二進位制數
- 根據字典,轉成相應的進位制
- 驗證二進位制數字正規表示式
- 【刷演算法】二進位制中1的個數演算法
- 二維陣列根據某個欄位排序陣列排序
- 劍指 Offer 15. 二進位制中1的個數
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 二維陣列根據鍵的值進行排序陣列排序
- 對十進位制數字的按位輸出,取反,並求其位數
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- leedcode-數字轉換為十六進位制數
- 二進位制漏洞挖掘之整數溢位
- 教你如何進行數倉字串、二進位制、十六進位制互轉字串
- 對陣列中的數字 1 和 2 進行排序,使得數字 1、2 分別位於前、後部分陣列排序
- 負數補碼(16進位制轉10進位制的負數)
- 使用 Haskell 將十進位制數字轉成羅馬數字Haskell
- 【proto】python根據proto檔案構造message,並換為二進位制Python
- 如何把十進位制的數輸入用二進位制全加器,並以十進位制輸出
- offer通過--10二進位制中統計1的個數-2
- 【劍指offer中等部分4】二進位制中1的個數(java)Java
- 牛客網 二進位制數(進位制轉換、北郵機試)
- 任意進位制下的可逆素數 C++C++