class Solution { public int maximumGap(int[] nums) { if(nums.length<2) return 0; int max=Integer.MIN_VALUE; int min=Integer.MAX_VALUE; for(int num:nums) { max=Math.max(max, num); min=Math.min(min, num); } int gap=(int)Math.ceil((double)(max-min)/(nums.length-1)); if(gap==0) return 0; int[] arrMax=new int[nums.length]; int[] arrMin=new int[nums.length]; for(int i=0;i<arrMax.length;i++) { arrMax[i]=Integer.MIN_VALUE; arrMin[i]=Integer.MAX_VALUE; } for(int num:nums) { int idx=(num-min)/gap; arrMax[idx]=Math.max(arrMax[idx], num); arrMin[idx]=Math.min(arrMin[idx], num); } int maxCap=Integer.MIN_VALUE; int prev=min; for(int i=0;i<arrMax.length;i++) { if(arrMax[i]==Integer.MIN_VALUE&&arrMin[i]==Integer.MAX_VALUE) continue; maxCap=Math.max(maxCap, arrMin[i]-prev); prev=arrMax[i]; } return maxCap==Integer.MIN_VALUE?max-min:maxCap; } }