945:使数组唯一的最小增量(C++)

题目地址:https://leetcode-cn.com/problems/minimum-increment-to-make-array-unique/

题目描述

给定整数数组 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:第一种思路是用数组统计出每个数出现的次数,然后对于每个重复出现的数,暴力地将它递增,直到它增加到一个没有重复出现的数为止。但这样的方法的时间复杂度较大,可以达到O(n^2)

思路2:另一种思路是首先对拿到的数组排序,然后用变量tmp初始化A[0],用于储存较大值,接下来,从后一个数开始遍历,如果发现后一个数比tmp大,则更新tmp,否则,将当前数A[i]调整为tmp+1所需次数,即tmp+1-A[i]

程序源码

class Solution {
public:
    int minIncrementForUnique(vector<int>& A) {
        if(A.size() < 2) return 0;
        sort(A.begin(), A.end());
        int tmp = A[0], res = 0;
        for(int i = 1; i < A.size(); i++)
        {
            if(A[i] > tmp)
            {
              tmp = A[i];
            }
            else
            {
                res += tmp - A[i] + 1;
                tmp++;
            }
        }
        return res;
    }
};

原文链接: https://www.cnblogs.com/wzw0625/p/12544368.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    945:使数组唯一的最小增量(C++)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/336862

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午10:53
下一篇 2023年3月1日 下午10:53

相关推荐