453 长为n的数组,找到让所有元素相等的最小移动次数。每次移动可以使n-1个元素增加1 点击此处返回总目录 462 长为n的数组,找到让所有元素相等的最小移动次数,其中每次可以使一个元素加1或减1
一、453 长为n的数组,找到让数组所有元素相等的最小移动次数。每次移动可以使n-1个元素增加1 【题目】
【分析】 每次让n-1个增加1,相当于让n-1个不动,每次让1个减少1。 每次让一个减1,最后要所有的相等。当然是,让所有的减到最小的那个值。 移动次数 = 所有值的和 - (最小值*数组长度)
【代码】
【结果】
二、462 长为n的数组,找到让所有元素相等的最小移动次数,其中每次可以使一个元素加1或减1
【题目】
【分析】 很多人会先下结论:在中位数的地方碰头。然后再用一堆数学证明。。。马后炮!因为你根本想不到在中位数的地方碰头啊。。。
其实不要整体想,要分开想。 两个人相距为x,只要两个人往中间走,无论在哪个地方碰头,两人走的步数和都为x。
这个题也是啊。。
第1个人和最后1个人,只要往中间走,在哪碰头都是最少的,步数为nums[n-1]-nums[0];
因此,先排序,然后所有人往最中间走。如果不都往中间走,边边的人倒是无所谓,中间的人就多走路了。
【方法一:先排序,再计算】
代码:
结果:
【方法二:o(n)时间】
方法一的时间复杂度为nlogn,但是我们可以o(n)内完成。 我们学过如何o(n)的时间内找到中位数。 后面再补。
|