力扣 根據數字二進位制下1的數目排序

2021-10-10 07:25:13 字數 2194 閱讀 1134

給你乙個整數陣列 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

用pair結構(pair)儲存陣列中的數字二進位制數中1的數目a和陣列中的數字b, 然後根據a和b的大小對陣列進行排序, 最後將排序後的陣列存入結果並輸出

ac**:

class

solution

intcal

(int n)

//找出某個數的二進位制數中1的個數

return ans;

} vector<

int>

sortbybits

(vector<

int>

& arr));

//pair用大括號表示,如

}sort

(_arr.

begin()

,_arr.

end(

),cmp1)

;//關於pair型別用sort排序的方法

for(

auto i:_arr)

return ans;}}

;

class

solution

intcal

(int n)

return ans;

} vector<

int>

sortbybits

(vector<

int>

& arr));

}sort

(_arr.

begin()

,_arr.

end(

),cmp1)

;//報錯資訊位置

for(

auto i:_arr)

return ans;}}

;

sort(a,b,cmp1)sort函式中第三個引數是乙個普通函式指標

如果將cmp1函式放入類中, 則其為非靜態成員函式, 而非靜態成員函式指標和普通函式指標是有區別的, 非靜態成員函式擁有乙個隱式引數(具體如下), 而普通函式顯然沒有這個隱式引數( implicit parameter), 兩者指向的函式的引數列表都不同, 因而兩者不同

bool

cmp(solution*

this

, pair<

int,

int>a,pair<

int,

int>b)

如果將cmp1函式放入類中, 且用static修飾, 則cmp1表示靜態成員函式, 靜態成員函式指標和普通函式指標沒有區別. 類的靜態成員和普通成員函式的區別在於,他們是不依賴於具體物件的,所有例項化的物件都共享同乙個靜態成員,所以靜態成員也沒有this指標的概念。

所以,指向類的靜態成員的指標就是普通的指標。

如果將cmp1函式放在類的外面宣告為全域性函式,則其指標也為普通函式指標

力扣1356題 根據數字二進位制下 1 的數目排序

給你乙個整數陣列arr。請你將陣列中的元素按照其二進位制表示中數字1的數目公升序排序。如果存在多個數字二進位制中1的數目相同,則必須將它們按照數值大小公升序排列。請你返回排序後的陣列。示例 1 輸入 arr 0,1,2,3,4,5,6,7,8 輸出 0,1,2,4,8,3,5,6,7 解釋 0 是唯...

力扣1356 根據數字二進位制下 1 的數目排序

給你乙個整數陣列 arr 請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小公升序排列。請你返回排序後的陣列。解答 統計二進位制1的個數可以分別獲取每個二進位制位數,然後再統計其1的個數,此方法效率比較低。這裡介紹另...

力扣1356 根據數字二進位制下 1 的數目排序

知識點 class solution while x cp 0 vector反轉的方式 方式1 reverse res.begin res.end 方式2 return static int countones const vector b return cnt static bool mycmp ...