5777. 使数组元素相等的减少操作次数
Posted 南岸青栀*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5777. 使数组元素相等的减少操作次数相关的知识,希望对你有一定的参考价值。
5777. 使数组元素相等的减少操作次数
思路:寻找当前数前面有多少种不同的数字
超时
class Solution:
def reductionOperations(self, nums: List[int]) -> int:
# count = 0
# while (min(nums)*len(nums)) != sum(nums):
# nums.sort(reverse=True)
# flag = 0
# #寻找第二大的数字
# for i in range(len(nums)):
# if nums[i] >= nums[0]: flag += 1
# nums[0] = nums[flag]
# count += 1
超时改进
class Solution:
def reductionOperations(self, nums: List[int]) -> int:
if (min(nums)*len(nums)) == sum(nums): return 0
count = 0
lst = list(set(nums))
lst.sort()
print(lst)
for i in range(len(nums)):
count += lst.index(nums[i])
return count
依旧超时。。。
超时改进
思考:使用字典模拟哈希表
class Solution:
def reductionOperations(self, nums: List[int]) -> int:
if (min(nums)*len(nums)) == sum(nums): return 0
count = 0
lst = list(set(nums))
lst.sort()
dic = {}
for i in range(len(lst)):
dic[lst[i]] = i
print(lst)
for i in range(len(nums)):
count += dic[nums[i]]
return count
官方题解:一次遍历
class Solution:
def reductionOperations(self, nums: List[int]) -> int:
nums.sort()
count,res = 0,0
for i in range(1,len(nums)):
if nums[i] != nums[i-1]:
count += 1
res += count
return res
以上是关于5777. 使数组元素相等的减少操作次数的主要内容,如果未能解决你的问题,请参考以下文章