网站自然排名往后掉/商丘 峰少 seo博客
题目地址:
https://www.lintcode.com/problem/minimum-moves-to-equal-array-elements/description
给定一个长nnn数组AAA,每次操作允许将其中的n−1n-1n−1个数进行加111的操作,问至少进行多少次操作可以使得AAA的所有数都相等。
设AAA的最小值是mmm,则答案就是∑i(A[i]−m)\sum_i (A[i]-m)∑i(A[i]−m)。问题可以转述为加多少个形如(1,1,...,1)−(0,0,...,0,1,0,...,0)(1,1,...,1)-(0,0,...,0,1,0,...,0)(1,1,...,1)−(0,0,...,0,1,0,...,0)这样的向量可以使得每个数都相等。也就是在问减去多少个形如(0,0,...,0,1,0,...,0)(0,0,...,0,1,0,...,0)(0,0,...,0,1,0,...,0)这样的向量可以使得每个数都相等。显然答案就是∑i(A[i]−m)\sum_i (A[i]-m)∑i(A[i]−m)。代码如下:
public class Solution {/*** @param nums: an array* @return: the minimum number of moves required to make all array elements equal*/public int minMoves(int[] nums) {// Write your code hereint min = Integer.MAX_VALUE;for (int num : nums) {min = Math.min(min, num);}int res = 0;for (int num : nums) {res += num - min;}return res;}
}
时间复杂度O(n)O(n)O(n),空间O(1)O(1)O(1)。