publicstaticintgetMaxSub(int[] nums){int len = nums.length;int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;//先找到数组中最大值和最小值for(int num : nums){
max = num > max ? num : max;
min = num < min ? num : min;}//如果最大值等于最小值,说明数组中只有一种数字if(max == min){return0;}boolean[] hasNum =newboolean[nums.length+1];//确定桶中是否有数int[] maxs =newint[nums.length+1];//桶中最大值int[] mins =newint[nums.length+1];//桶中最小值for(int i =0; i < nums.length; i++){int buck =bucket(nums[i], len, max, min);
maxs[buck]= hasNum[buck]? Math.max(nums[i],maxs[buck]): nums[i];
mins[buck]= hasNum[buck]? Math.min(nums[i],mins[buck]): nums[i];
hasNum[buck]=true;}int res =0;int lastMax = maxs[0];for(int i =1; i <= len; i++){if(hasNum[i]){
res = Math.max(mins[i]-lastMax,res);
lastMax = maxs[i];}}return res;}publicstaticintbucket(int num,int len,int max,int min){return(num - min)* len /(max - min);}