📅  最后修改于: 2023-12-03 15:21:58.985000             🧑  作者: Mango
给定一个长度为 n 的数组,你需要找到一个整数 x,使得将数组中的每个元素减去 x 后,所有元素都相等。计算将数组中的元素减去 x 后的最小总和。
例如,给定数组 nums = [1,2,3],你可以将 x 设为 2,那么将数组中的每个元素减去 2 后,所有元素都变成了 1,此时数组的和为 3,是最小的。
输入: nums = [1,2,3] 输出: 3 解释: 将 x 设为 2,那么将数组中的每个元素减去 2 后,所有元素都变成了 1,此时数组的和为 3,是最小的。
输入: nums = [2,2,2,2,5] 输出: 3 解释: 将 x 设为 2,那么将数组中的每个元素减去 2 后,所有元素都变成了 2,此时数组的和为 15,将 x 设为 3 也可以得到相同的结果。
假设数组中每个元素减去 x 后的和是 s,则数组中的每个元素最终的值是 s/n。为了使 s 最小,我们需要找到 s/n 的最小值,即找到数组中的最小数值。
时间复杂度:O(n),空间复杂度:O(1)。
def minMoves(nums: List[int]) -> int:
return sum(nums) - min(nums) * len(nums)
function minMoves(nums) {
return nums.reduce((acc, val) => acc+val, 0) - Math.min(...nums) * nums.length;
}
public int minMoves(int[] nums) {
int min = nums[0];
int sum = 0;
for (int num : nums) {
if (num < min) {
min = num;
}
sum += num;
}
return sum - min * nums.length;
}