根据数字二进制下 1 的数目排序
错误代码
Arrays.sort(arr,(l,r)->l-r)后面自定义必须是类
正确代码
class Solution {
public int[] sortByBits(int[] arr) {
int n = arr.length;
int[] res = new int[n];
Node[] nodes = new Node[n];
for(int i=0;i<n;i++){
nodes[i] = new Node(arr[i],oneNum(arr[i]));
}
//对于后面用(l,r)->l-r之类的,l和r必须是封装类型否则会报错
Arrays.sort(nodes,(l,r)->{
if(l.bitCnt != r.bitCnt) return l.bitCnt - r.bitCnt;
return l.val - r.val;
});
for(int i=0;i<n;i++){
res[i] = nodes[i].val;
}
return res;
}
public int oneNum(int num){
int cnt = 0;
while(num != 0){
cnt++;
num = num & (num-1);//消去最右边的1
}
return cnt;
}
}
class Node{
int val;
int bitCnt;
Node(int val,int bitCnt){
this.val = val;
this.bitCnt = bitCnt;
}
}
不一样的烟火
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步