每日一题,每日一练,7 使数组唯一的最小增量、

  1. 使数组唯一的最小增量、
    给定整数数组 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 操作是不能让数组的每个值唯一的。

早上打周赛,下午查数据,晚上背英语,还有一万字的小组作业,AWSL,直接用最简单的方法匆匆过完了一题,计数思想,先统计每个数据有多少个,因为字典不能变动,我们再创建一个有序列表注明键有哪些,然后对键计数,当前键只保留一个,把剩下的值键-1挪到后一个键或者创建一个新键,直到列表中最后一个元素在字典中的值为1

class Solution:
    def minIncrementForUnique(self, A: List[int]) -> int:
        check={}
        co=0
        i=0
        mid=0
        for i in range(len(A)):
            try:
                check[A[i]]=check[A[i]]+1
            except KeyError:
                check[A[i]]=1
        point=sorted(list(check.keys()))
        i=0
        while(i<len(point)):
            mid=point[i]
            if(check[mid]>1): 
                co=co+check[mid]-1
                try:
                    check[mid+1]=check[mid+1]+check[mid]-1
                except KeyError:
                    point.insert(i+1,mid+1)
                    check[mid+1]=check[mid]-1
            i=i+1
        return co

我承认我有赌的成分,不过明天要么写PAT要么猝死

发布了10 篇原创文章 · 获赞 0 · 访问量 91

猜你喜欢

转载自blog.csdn.net/final_begin/article/details/105038472
今日推荐