Leetcode 1356. Sort Integers by The Number of 1 Bits
题目链接: Sort Integers by The Number of 1 Bits
难度:easy
题目大意:
将输入的一个整形数组按照其二进制中“1”的个数进行降序排序,如果二进制中“1”的个数相同,按数值大小进行升序排列,
思路:
1、自定义一个函数来计算数组元素转化成二进制数后“1”的个数。
2、因为数组元素0 <= arr[i] <= 10^4,将数组元素二进制数“1”的个数乘10001在加上数组元素本身的大小,这样处理后得到的数符合题目的排序要求。
3、将处理后的数组用Array.sort()进行排序。
4、将排序后的数组对10001取余,得到排序后的原数组,将结果返回。
代码
class Solution {
public int[] sortByBits(int[] arr) {
for(int i=0;i<arr.length;i++){
arr[i]=numofone(arr[i])*10001+arr[i];
}
Arrays.sort(arr);
for(int i=0;i<arr.length;i++){
arr[i]%=10001;
}
return arr;
}
public int numofone(int a){
//统计一个十进制数转为二进制有几个1
int num=0;
while(a>0){
if(a%2!=0){
num++;
}
a/=2;
}
return num;
}
}