美文网首页
使数组唯一的最小增量

使数组唯一的最小增量

作者: _阿南_ | 来源:发表于2020-03-22 21:41 被阅读0次

题目:

给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。

返回使 A 中的每个值都是唯一的最少操作次数。

示例 1:

输入:[1,2,2]
输出:1
解释:经过一次 move 操作,数组将变为 [1, 2, 3]。
示例 2:

输入:[3,2,1,2,1,7]
输出:6
解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的。
提示:

0 <= A.length <= 40000
0 <= A[i] < 40000

题目的理解:

错误解法1:

因为A的长度可能为0,所以需要先判断A的个数小于2的情况。
(1)获取数字不相同值的个数,求得哪个数字B是需要移动的,并且对B排序。
(2)将提供的数组A进行取集合,然后再排序得到C。
(3)取B中的值进行move操作,如果move后的值在C中存在,那么继续move。
(4)直到所有的值都move完成。

class Solution:
    def minIncrementForUnique(self, A: List[int]) -> int:
        if len(A) < 2:
            return 0

        from collections import Counter, defaultdict
        count_dic = dict(Counter(A))
        A_set_sorted = list(set(A))
        A_set_sorted.sort()

        many_number = defaultdict(int)
        for key, value in count_dic.items():
            if value > 1:
                many_number[key] = value - 1
        many_number = dict(sorted(many_number.items()))

        point = A_set_sorted[0]
        move_count = 0
        for key, value in many_number.items():
            if key > point:
                point = key

            A_set_sorted = list(filter(lambda x: x > point, A_set_sorted))
            for index in range(value):
                while True:
                    point += 1
                    if point not in A_set_sorted:
                        move_count += point - key
                        break

        return move_count

非常的遗憾,运行超时了。

python实现

查看了解题,真的是简明啊。

class Solution:
    def minIncrementForUnique(self, A: List[int]) -> int:
        count = [0] * 80000
        for x in A:
            count[x] += 1
        
        ans = taken = 0
        for x in range(80000):
            if count[x] >= 2:
                taken += count[x] - 1
                ans -= x * (count[x] - 1)
            elif taken > 0 and count[x] == 0:
                taken -= 1
                ans += x
        
        return ans

继续学习吧解题思路.

提交

每次碰到中等难度,就有点吃力啊,还要继续刷刷刷

// END 每次的挫折,是自己成功的起点

相关文章

网友评论

      本文标题:使数组唯一的最小增量

      本文链接:https://www.haomeiwen.com/subject/wuumyhtx.html