解题思路:
基础思想是先排序再判断
我的排序是归并排序,题解的标答是桶排序
提交代码:
class Solution {
public int maximumGap(int[] nums) {
if(nums.length==0||nums.length==1)
return 0;
mergeSort(nums,0,nums.length-1);
int maxGap=0;
for(int i=1;i<nums.length;i++)
if(nums[i]-nums[i-1]>maxGap)
maxGap=nums[i]-nums[i-1];
return maxGap;
}
public void mergeSort(int[] nums,int l,int r) {
if(l==r) return;
int mid=(l+r)/2;
mergeSort(nums,l,mid);
mergeSort(nums,mid+1,r);
merge(nums,l,mid,r);
}
public void merge(int[] nums,int l,int mid,int r) {
int len=r-l+1;
int[] tmp=new int[len];
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r)
tmp[k++]=nums[i]<nums[j]?nums[i++]:nums[j++];
while(i<=mid)
tmp[k++]=nums[i++];
while(j<=r)
tmp[k++]=nums[j++];
for(k=0;k<len;k++)
nums[l++]=tmp[k];
}
}
运行结果:
代码优化
1.边界的优化:
if(nums.length==0||nums.length==1)
return 0;
可以优化为:
if(nums==null||nums.length<2)
2.for循环内部:
for(int i=1;i<nums.length;i++)
if(nums[i]-nums[i-1]>maxGap)
maxGap=nums[i]-nums[i-1];
可以优化为:
for(int i=1;i<nums.length;i++)
maxGap=Math.max(nums[i]-nums[i-1],maxGap);