453 Minimum Moves to Equal Array Elements

https://leetcode.com/problems/minimum-moves-to-equal-array-elements/?tab=Description

<Math>

给你一个array,每次操作可以使一个数不变,同时array中其余的数各+1。最少需要操作多少次可以让array里的值全都相等。

 

两种想法,殊途同归

想法一:想让所有的元素都相等,那肯定要考虑怎么样才能让最小的和最大的相等,于是最大的原地不动,其他的元素+1,一直做max-min次后,最大的和最小的相等。这时,最小的依然是最小的,最大的也变成最小的,以前第二大的变成现在最大的了。所以答案其实就是把最小项到各个数字的gap加起来。相同的项毫无影响,他兄弟怎么做,他就怎么做即可。比如说答案123那个,改成1123,也一样,1怎么做,其他1也怎么做就是了

 

想法二:其实我们并不在乎array里的数是多少,只在乎数与数之间的相对距离。于是我们想到,一个数不变,其他数都加1. 等价于这个数 -1 ,其他数都不变。每次可以使一个数-1, 需要减一多少次,才能让array相等呢?自然是每个数都跟min比一下即可。 求个和,然后减去n * min即可

猜你喜欢

转载自www.cnblogs.com/philipyang/p/10739507.html
今日推荐