classSolution{publicintmaximumGap(int[] nums){int n = nums.length;if(n <2){return0;}int[] buc =newint[n];int now =1;int maxnum = Arrays.stream(nums).max().getAsInt();while(now <= maxnum){//计数,用来记录now位为0~9的数组int[] cnt =newint[10];//遍历数组,记录cntfor(int i : nums){
cnt[(i / now)%10]++;}//将cnt的值变为buc的下标的上限for(int i =1; i <10; i++){
cnt[i]+= cnt[i -1];}//将nums放入桶里for(int i = n -1; i >=0; i--){int dig =(nums[i]/ now)%10;//nums下标从0开始,cnt最小为1,所以-1
buc[cnt[dig]-1]= nums[i];//从大到小逆序放入,下标也是逆序
cnt[dig]--;}
now *=10;//将数组拷贝回去
System.arraycopy(buc,0, nums,0, n);}int ans =0;for(int i =1; i < n; i++){
ans = Math.max(ans, buc[i]- buc[i -1]);}return ans;}}