453. Minimum Moves to Equal Array Elements
1 | class Solution { |
当我在想dp中让哪个不增的时候, 我就想到之前说的, dp中尽量避免用否定, 但是好像这里也不怎么好避免. 哪个不增, 这让我想到相对位置关系. 如果除了某个数字都增, 那不就是只有该数字减, 不管是除了该数字外都加还是只有该数字减, 操作完后得到的数组数字间的相对大小差值是一样的. 比如我除了第0个元素外都加1, 那么0元素之后的元素间的相对位置都还是一样, 和0元素间的相对位置要么减去了1(对于小于第0个元素的元素来说), 要么加上了1(对于大于第0个元素的元素来说). 那么我让第0个元素减去1, 那也是第0个元素之后的元素间相对位置不变, 和第0个元素的相对位置要么减去1(对于小于第0个元素的元素来说), 要么加上1(对于大于第0个元素的元素来说). 因此这两个操作在元素相对位置的层面上是等价的.
于是我们此时就转化为每次只能挑一个数字减去1, 那么求让所有数字都相等, 至少需要多少步. 那就是找到最小值, 然后看每个数字和最小值差多少, 把这些差加在一起就是答案.
时间复杂度: O(n)
空间复杂度: O(1)