📅  最后修改于: 2023-12-03 15:40:15.607000             🧑  作者: Mango
给定一个整数数组,你可以删除一个或多个元素,或者在数组的任意位置插入一个元素。你需要使所有元素相等,返回使所有元素相等所需的最小操作数。
首先求出数组的平均值,设为m。在每次操作中,我们可以删除数组中任意一个元素或者在任意位置插入任意一个值,使该数组的平均值增加或减少一个数。而对于当前的一个数a,其与目标平均值之间的距离为|a-m|,每一步的操作都使其距离缩小1,因此,最终的答案就是所有距离的和。
class Solution:
def minMoves2(self, nums: List[int]) -> int:
nums.sort()
mid = nums[len(nums) // 2]
return sum(abs(num - mid) for num in nums)
时间复杂度:排好序的时间复杂度为O(nlogn),遍历整个数组的复杂度为O(n),所以总时间复杂度为O(nlogn+n)=O(nlogn)。
空间复杂度:本算法不需要额外的存储空间,因此空间复杂度为O(1)。
LeetCode官方题解:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii/solution/zui-xiao-hua-shi-suo-you-shu-zu-yuan-su-x-482p/