min是什么缩写,5分钟缩写是min还是mins

  

  2021-05-20:给定一个数组arr,如果排序,返回两个相邻数字之间的最大差值。要求:时间复杂度O(N)。   

  

  精彩回答2021-05-20:   

  

  假设回答法。数字N,根据最大值和最小值的范围分成N-1个桶。每个桶只需要存储当前桶的最大值和最小值。根据鸽笼原理,必须有一个空桶。最后只需要遍历找到[右桶min-左桶max]并返回最大值。最后的答案可能来自相邻的桶(这个很难想到),也可能来自跨桶(一个空桶的左右两边都是跨桶),但一定不是来自同一个桶的内部。另外,这个问题是把空间复杂度换成时间复杂度。   

  

  用golang代码写的。代码如下:   

  

  package main import(' fmt ' ' math ')func main(){ arr :=int { 17,13,15,0,49,47,43,99,84} ret :=maxGap(arr) fmt。println(ret)} func maxGap(nums int)int { if len(nums)2 { return 0 } N :=len(nums)min :=math。MaxInt64 max :=数学。i :的minint 64=0;I N;I {min=getmin (min,nums) max=getmax (max,nums)}如果min==max { return 0 }//有多种数,min~max必须有range,len数据,准备1桶Len Hasnum :=make (bool,n 1)//有我进来的Hasnum的数吗?Maxs3360=make (int,N 1)//Maxsi Mins 3360=make(int,N 1)//Mins I bid 3366 I N收集的所有号码的最小值;i { bid=bucket(nums,N,min,max) mins=twoSelectOne(hasNum,getMin(mins,nums),nums) maxs=twoSelectOne(hasNum,getMax(maxs,nums),Num)hasNum=true } RES :=0 last max 3360=maxs 0//最后一个非空桶的最大值i :=1 forI=N;I {if hasnum {res=getmax (res,mins-lastmax)lastmax=maxs } } return RES }//如果当前数为num,则整个范围为min~max,分为len 1 share//FUNC bucket(num int,n int,min int,max int)int { return(num-MIN)* n/(max-MIN)} FUNC GET MIN(a int,b int)int { If a b { return a } else { return b } } func GET max(a int b int)int { if A b { return A } else { return b } } func two selectone(c bool,A,b int)int { if c { return A } else { return b } }执行结果如下:   

  

     

  

  ***   

  

  左边的java代码(https://gitee . com/moonfdd/coding-for-great-offer/blob/main/src/class 07/code 03 _ maxgap.java)   

相关文章