#力扣 LeetCode1356. 根據數字二進位制下 1 的數目排序 @FDDLC
阿新 • • 發佈:2021-02-13
技術標籤:演算法&資料結構
題目描述:
https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/
Java程式碼:
class Solution { public int[] sortByBits(int[] a) { int min=a[0],max=a[0]; for(int i=1;i<a.length;i++){ if(max<a[i])max=a[i]; else if(min>a[i])min=a[i]; } int[] count=new int[max-min+1],bv=new int[max+1],countb=new int[Integer.toBinaryString(max).length()+1],ans=new int[a.length]; for(int e:a){ count[e-min]++; if(bv[e-min]==0)bv[e-min]=Integer.bitCount(e); countb[bv[e-min]]++; } for(int i=0,v=min,ai=0;i<count.length;i++,v++){ for(int j=0;j<count[i];j++)a[ai++]=v; } for(int i=1;i<countb.length;i++)countb[i]+=countb[i-1]; for(int i=a.length-1;i>=0;i--){ ans[--countb[bv[a[i]-min]]]=a[i]; } return ans; } }
Java程式碼二:
class Solution { //乘以比10000大但又不會使結果溢位的數即可 public int[] sortByBits(int[] a) { //0 <= arr[i] <= 10^4 for(int i=0;i<a.length;i++)a[i]+=Integer.bitCount(a[i])*10001; //乘以其他更大的數亦可,但結果不能溢位 Arrays.sort(a); for(int i=0;i<a.length;i++)a[i]%=10001; //上面為10001,此處保持一致 return a; } }