题目
代码分析
是对桶排序思想的应用,最重要的代码是就是判断当前的元素应该放入到哪一个桶中。为了防止溢出,首先都是long型然后再转化成int型。其次就是找到空闲的桶以及空闲的桶的两边不是空的桶。
代码实现
public static int maximumGap(int[] nums) { int min=Integer.MAX_VALUE; int max=Integer.MIN_VALUE; for(int i=0;i<nums.length;i++) { min=Math.min(min,nums[i]); max=Math.max(max,nums[i]); } if(min==max) return 0; System.out.println(min+" "+max); int[] mins=new int[nums.length]; int[] maxs=new int[nums.length]; boolean[] isNotEmpty=new boolean[nums.length]; for(int i=0;i<nums.length;i++) { int index=findBucketIndex(nums[i],min,max,nums.length-1); System.out.println(index); mins[index]=!isNotEmpty[index]?nums[i]:Math.min(mins[index],nums[i]); maxs[index]=!isNotEmpty[index]?nums[i]:Math.max(maxs[index],nums[i]); isNotEmpty[index]=true; } max=Integer.MIN_VALUE; //找到空桶然后计算 int index=0; int start=-1; while(index<nums.length) { if(!isNotEmpty[index]&&start==-1) { start=index-1; }else if(isNotEmpty[index]&&start!=-1) { max=Math.max(max,mins[index]-maxs[start]); start=-1; } index++; } return max; } public static int findBucketIndex(long cur,long min,long max,long len) { return (int)((cur-min)*len/(max-min)); }
学习情况
1次