Leetcode 164 最大间距
题目
代码分析
是对桶排序思想的应用,最重要的代码是就是判断当前的元素应该放入到哪一个桶中。为了防止溢出,首先都是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次
