今天在leetcode上遇到一个问题,就是如何在最小移动步数下使数组中元素相等,每次仅能移动n-1个元素,而且每次只能加1?
其实这就是一个简单的数学问题,我们可以假设在m次移动后,所有元素达到相等,且相等值为val,那么,我们可以建立等式如下:
sum + m*(n-1) = val*n;(其中,sum是原始数组元素之和,n为元素个数),实际上,我们还有一个等式,那就是m步后val的值:
val = minNum + m;(其中,minNum是原始数组中最小值),因为原始数组中最小值是一直参与移动(增值)的,那么在m次移动后,val就是minNum+m,
所以,m = sum - minNum*n
就是这么简单!!!