908。SmallestRangeI题目链接908.SmallestRangeI题目分析给定一个数组A和一个数K,找出-K和K之间的一个数x并添加到数组A中的每个元素生成数组B,并返回差值最小的值数组B中的最大值和最小值之间。思路根据题目,我们需要将-K<=x<=K中的任意整数加到数组A中的每个元素上,使得最大值和最小值的差值新生成的数组B的最小值最小。如何最小化最大值和最小值之间的差异?最大值和最小值越接近中间值,最大值和最小值的差值越小。例如:A=[-3,1,3,5,4,6],K=3先求中间值:$mid=ceil((max($A)+min($A))/2).(-3+6)/2四舍五入为2。然后遍历每个元素。第0个:-3为了更接近上面得到的2,需要加上2-(-3)=5。然而,5>(K=3)。那么只能把K的最大值加到3。-3+3=0;第一个:1接近2,需要1,-K<=1<=K,1+1=2;第二个:3,-K<=-1<=K,3-1=2;第三:5,-K<=-3<=K,5-3=2;第4个:4,-K<=-2<=K,4-2=2;第5个:6,-4<(-K=3),取最小值-3,6-3=3。然后我们得到数组B=[0,2,2,2,2,3]。最大值与最小值之差为3-0=3。最终代码$K&&$a>=$mid){$b[]=$a-$K;}elseif($a-$mid<$K&&$a>=$mid){$b[]=$mid;}elseif($mid-$a<$K&&$a<$mid){$b[]=$mid;}elseif($mid-$a>$K&&$a<$mid){$b[]=$a+$K;}}返回最大值($b)-最小值($b);}}如果您觉得本文有用,欢迎使用爱心发电募集资金。
