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. 使数组元素相等的减少操作次数的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——最小操作次数使数组元素相等

Leetcode——最小操作次数使数组元素相等

最小化操作次数使数组的所有元素相等

《LeetCode之每日一题》:183.最小操作次数使数组元素相等

453. 最小移动次数使数组元素相等(数学)

leetcode打卡--453. 最小操作次数使数组元素相等[关于数学的等效替代法]