📅  最后修改于: 2023-12-03 14:58:05.795000             🧑  作者: Mango
当数组中的元素不相同时,我们可能需要通过对数组进行多次操作来使其所有元素相等。但如果我们知道答案一定是数组的最小值,就可以通过将数组元素减少到最小次数的一半,使所有数组元素相等。
我们可以遍历整个数组,找到数组中出现次数最少的元素。然后我们可以计算出将这些元素减少到最小次数所需要的次数。如果这个次数与数组长度的一半以上,我们就知道无法将所有元素变成最小值,返回-1。否则,我们可以返回这个计算出来的次数。
以下是一个Python代码示例:
def make_elements_equal(nums):
counts = {}
for n in nums:
if n not in counts:
counts[n] = 1
else:
counts[n] += 1
min_count = float('inf')
for count in counts.values():
if count < min_count:
min_count = count
if min_count * 2 > len(nums):
return -1
return len(nums) - min_count * 2
以上代码的时间复杂度为O(n),空间复杂度为O(n)。