zoukankan      html  css  js  c++  java
  • 【LeetCode】945. 使数组唯一的最小增量

    题目

    给定整数数组 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,如果当前数小于前一个数,则当前数递增到前一个数加1。

    代码

    时间复杂度:O(nlogn),排序时间复杂度
    空间复杂度:O(logn)

    class Solution {
    public:
        int minIncrementForUnique(vector<int>& A) {
            sort(A.begin(), A.end());
            int res = 0;
            for (int i = 1; i < A.size(); ++i) {
                if (A[i] == A[i - 1]) {
                    ++A[i];
                    ++res;
                } else if(A[i] < A[i - 1]) {
                    res += A[i - 1] + 1 - A[i]; 
                    A[i] = A[i - 1] + 1;
                }
            }
            return res;
        }
    };
    
  • 相关阅读:
    java虚拟机小贴士之GC分析
    hystrix文档翻译之工作原理
    hystrix文档翻译之开始使用
    SQLALchemy--ORM框架
    PythonWEB框架之Flask--3
    补充
    PythonWEB框架之Flask--2
    PythonWEB框架之Flask
    centos6.8下redis的安装和配置
    celery
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12549110.html
Copyright © 2011-2022 走看看