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的數目排序力扣排序
- 力扣1356.根據數字二進位制下1的數目排序力扣排序
- leetcode.1356. 根據數字二進位制下 1 的數目排序LeetCode排序
- leetcode-1356. 根據數字二進位制下 1 的數目排序LeetCode排序
- 題目1513:二進位制中1的個數
- 二進位制中1的個數
- JavaScript 二進位制數字轉換為十進位制JavaScript
- 二維陣列根據欄位進行排序陣列排序
- javascript十進位制數字和二進位制相互轉換JavaScript
- 位運算--求一個 數二進位制中1的個數
- 位運算(一):二進位制中1的個數
- 負數的二進位制數問題
- 數字邏輯練習題-(二進位制/16進位制模擬)
- 頁面顯示二進位制數原始據亂碼
- 求一個整數的二進位制中1的個數
- C++輸入十進位制數,輸出對應二進位制數、十六進位制數C++
- 根據介面返回的二進位制流匯出檔案
- 【劍指offer】二進位制中1的個數
- SpringJpa @query 中根據傳入引數(欄位)排序Spring排序
- 其他進位制的數字 轉換
- 驗證二進位制數字正規表示式
- 求二進位制數中1的個數(程式設計之美)程式設計
- js將數字轉換為二進位制、十六進位制或者八進位制程式碼JS
- 【刷演算法】二進位制中1的個數演算法
- 根據字典,轉成相應的進位制
- 1417 二進位制數的大小
- js將數字轉換成二進位制形勢JS
- IBM Power6拋棄傳統二進位制 使用十進位制數字IBM
- 二維陣列根據某個欄位排序陣列排序
- 牛客網測試題 把十六進位制數字轉換為十進位制數字
- java二進位制正數和負數取反Java
- 對十進位制數字的按位輸出,取反,並求其位數
- 整數轉化成八進位制、十六進位制、二進位制,以及轉回
- 劍指 Offer 15. 二進位制中1的個數
- JZ-011-二進位制中 1 的個數
- 【c語言】統計一個數二進位制中的1的個數C語言
- python 數字 十六進位制 列印Python