前言
今日重点是统计1的数目,java可以直接使用Integer.bitCount函数或者自定义,注意*100000是为了所有的树都能乘,方便后面求每个数
题目
源码
java自定义count
class Solution {
public int[] sortByBits(int[] arr) {
int[] count=new int[arr.length];
for(int i=0;i<arr.length;++i){
count[i]=bitCount(arr[i]) * 1000000 + arr[i];
}
Arrays.sort(count);
for(int i=0;i<arr.length;++i){
count[i]=count[i] % 1000000;
}
return count;
}
public int bitCount(int num){
int cnt=0;
for(int i=0;i<32;++i){
if((num & (1<<i))!=0){
cnt++;
}
}
return cnt;
}
}
java使用自带库
class Solution {
public int[] sortByBits(int[] arr) {
int[] count=new int[arr.length];
for(int i=0;i<arr.length;++i){
count[i]=Integer.bitCount(arr[i]) * 1000000 + arr[i];
}
Arrays.sort(count);
for(int i=0;i<arr.length;++i){
count[i]=count[i] % 1000000;
}
return count;
}
// public int bitCount(int num){
// int cnt=0;
// for(int i=0;i<32;++i){
// if((num & (1<<i))!=0){
// cnt++;
// }
// }
// return cnt;
// }
}
python排序丰富,更好实现
class Solution:
def sortByBits(self, arr: List[int]) -> List[int]:
return sorted(arr,key=lambda x:(bin(x).count('1'),x))