zoukankan      html  css  js  c++  java
  • Leetcode 945 使数组唯一的最小增量 贪心

    地址 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

    解法: 

    贪心算法 每次讲n个重复的数字中n-1个数字进行移动 增加到一个不重复的数字。

    我觉得这题目难点反而在证明

    1 2 2 3  我们将其中一个2 增加到4  总共移动2次

    也可以将3 增加到4  2 增加到3 也是总共移动2次

    代码

     1 class Solution {
     2 public:
     3     int minIncrementForUnique(vector<int>& A) {
     4         sort(A.begin(),A.end());
     5         int ans = 0;
     6 
     7         for(int i = 1;i < A.size();i++){
     8             if(A[i] <= A[i-1]){
     9                 int increase = A[i-1]+1-A[i];
    10                 ans += increase;
    11                 A[i] += increase;
    12             }
    13         }
    14 
    15         return ans;
    16     }
    17 };
    View Code

    使数组唯一的最小增量

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    原生JS---2
    PHP中include和require绝对路径、相对路径问题
    魔方(小玩具)
    html5技术介绍
    苹果电脑 快捷键
    写代码的心得,怎么减少编程中的 bug?
    http状态代码含义表
    开源项目
    蓝牙 CoreBluetooth
    减小iOS应用程序的大小
  • 原文地址:https://www.cnblogs.com/itdef/p/12545230.html
Copyright © 2011-2022 走看看