【leetcode】164.(Hard)Maximum Gap

解题思路:

基础思想是先排序再判断
我的排序是归并排序,题解的标答是桶排序

提交代码:

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);

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/87713219
GAP
GAP