zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    android activity lifecycle
    android hal 分析
    android hardware.c 源码分析
    linux cpio
    android boot.img unpack pack
    imx6 android4.2 编译
    repo 安装
    repo manifest.xml 分析
    ElasticSearch 5.0.0 安装部署常见错误或问题
    elasticsearch 安装(基于java运行环境)
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12544368.html
Copyright © 2011-2022 走看看