給你乙個整數陣列 arr 。請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。
如果存在多個數字二進位制中 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]
示例 2:
輸入:arr = [1024,512,256,128,64,32,16,8,4,2,1]
輸出:[1,2,4,8,16,32,64,128,256,512,1024]
解釋:陣列中所有整數二進位制下都只有 1 個 1 ,所以你需要按照數值大小將它們排序。
示例 3:
輸入:arr = [10000,10000]
輸出:[10000,10000]
示例 4:
輸入:arr = [2,3,5,7,11,13,17,19]
輸出:[2,3,5,17,7,11,13,19]
示例 5:
輸入:arr = [10,100,1000,10000]
輸出:[10,100,10000,1000]
1 <= arr.length <= 500
0 <= arr[i] <= 10^4
思路;記錄乙個新思路,利用乙個陣列記錄兩組資訊,計算陣列元素中1的個數,因為題目中要求,arr[i] < 10^4, 所以將得到的結果乘10000(10^5),再加arr[i]本身,得到的結果高位記錄了元素本身轉為二進位制後1的個數,低位記錄了arr[i]本身,接著進行排序,這種排序滿足例項中所有的要求。接著進行除餘即可得到符合要求的排序。
**:
class solution
arrays.sort(arr);
for (int i = 0; i < arr.length; i++)
return arr;
}}
1356 根據數字二進位制下 1 的數目排序
hello aohy 今天呢做了個決定好好學演算法,嗯,力扣每日打卡,希望你能堅持下去。這是鏈結 看到題目首先想到的就是暴力排序了,但是注意到 大小是有兩個規則 所以簡單點的想法就是計算每個數二進位制表示中1的個數,統計比較輸出就行。然後我去看題解了。然後我知道了sort的重寫規則樣式 這樣的cla...
1356 根據數字二進位制下 1 的數目排序
題目描述 給你乙個整數陣列 arr 請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小公升序排列。請你返回排序後的陣列。輸入 arr 0,1,2,3,4,5,6,7,8 輸出 0,1,2,4,8,3,5,6,7 解釋...
力扣1356 根據數字二進位制下 1 的數目排序
給你乙個整數陣列 arr 請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小公升序排列。請你返回排序後的陣列。解答 統計二進位制1的個數可以分別獲取每個二進位制位數,然後再統計其1的個數,此方法效率比較低。這裡介紹另...