问题:使数组唯一的最小增量

给定整数数组 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 操作是不能让数组的每个值唯一的。

提示:

  1. 0 <= A.length <= 40000
  2. 0 <= A[i] < 40000

链接:https://leetcode-cn.com/contest/weekly-contest-112/problems/minimum-increment-to-make-array-unique/

分析:

1.每次move会将一个数字值加一

2.最终每个数字都不一样

3.最终结果应该是唯一的

4.增加方式不唯一,但是等价,比如从1 4 变为4 5,可以是1+4,也可以是1+3,4+1

5.操作次数其实就是最终数列和减去初始数列和

那么将原序列排序,要求递增,且差值中至少1,如果本身值就比前一个大于1,则保持,否则增加为前一个数字值+1,统计累计加值即为最终结果。

AC Code:

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

其他:

第一code:

 typedef long long ll;
typedef vector<int> VI;
typedef pair<int,int> PII; #define REP(i,s,t) for(int i=(s);i<(t);i++)
#define FILL(x,v) memset(x,v,sizeof(x)) const int INF = (int)1E9;
#define MAXN 100005 class Solution {
public:
int minIncrementForUnique(vector<int>& A) {
if (A.size() == ) return ;
sort(A.begin(), A.end());
int last = A[];
int ans = ;
REP(i,,A.size()) {
if (A[i] <= last) {
ans += last + - A[i];
last++;
} else {
last = A[i];
}
}
return ans;
}
};

LeetCode945-使数组唯一的最小增量的更多相关文章

  1. [Swift]LeetCode945. 使数组唯一的最小增量 | Minimum Increment to Make Array Unique

    Given an array of integers A, a move consists of choosing any A[i], and incrementing it by 1. Return ...

  2. leetcode 945. 使数组唯一的最小增量

    题目 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例 1: 输入:[1,2,2] 输出:1 解释:经过一次 mov ...

  3. LeetCode-使数组唯一的最小增量

    题目描述: 给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 示例: 输入:[1,2,2] 输出:1 解释:经过一次 mo ...

  4. LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47

    453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...

  5. Java实现 LeetCode 453 最小移动次数使数组元素相等

    453. 最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 ...

  6. java算法----排序----(6)希尔排序(最小增量排序)

    package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...

  7. Leetcode 462.最少移动次数使数组元素相等

    最少移动次数使数组元素相等 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输入: [1,2, ...

  8. Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)

    801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元 ...

  9. Java实现 LeetCode 462 最少移动次数使数组元素相等 II

    462. 最少移动次数使数组元素相等 II 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输 ...

随机推荐

  1. 新的JSON / YAML插件:在JMeter中使用YAML

    在JMS插件从jmeter-plugins.org捐赠给核心JMeter之后,JSON插件在Apache JMeter™版本4中被弃用.现在,我已更新此插件以支持新功能和新功能.在这个新版本中,两个插 ...

  2. 实例/静态工厂方法得到bean

    <bean id="a" class="com.yundaex.wms.config.TestBeanChild" /> <bean id=& ...

  3. Hive进阶_Hive数据的导入

    使用Load语句执行数据的导入 语法: load data [local] inpath 'filepath' [overwrite] into table tablename [partition ...

  4. 练习三十:Python回文数判断编程练习。

    说到回文数,大家可能会比较的陌生,但是在我们的日常生活中常会遇到这样的数字,只是你不知道它是回文数罢了. 例如:12321,这组数字就是回文数. 设n是一任意自然数.若将n的各位数字反向排列所得自然数 ...

  5. 规则引擎.Net Core

    .Net Core 环境下构建强大且易用的规则引擎 https://www.cnblogs.com/chenug/p/9160397.html 本文源码: https://github.com/jon ...

  6. gulp管理angular2项目 配置文件

    目录结构: projectName |_ src |_ app |_ index.html |_ main.ts |_ systemjs.config.js |_ gulpfile.js |_ pac ...

  7. 原创 html动态表格

    <table id="opttb"> <asp:Repeater ID="tempOptions" runat="server&qu ...

  8. idea2018.1.2 激活

    https://www.cnblogs.com/ycjcham/p/8724451.html

  9. 小目标 | DAX高级实践-Power BI与Excel联合应用

    · 适用人群:数据分析专业人士,在数据分析方向需求发展人士 · 应用场景:数据汇报.数据可视化展现.数据建模分析 · 掌握难度:★★★★☆ 本期讲师 DAX高级实践-Power BI与Excel联合应 ...

  10. Installing Apache, PHP, and MySQL on Mac OS X

    I have installed Apache, PHP, and MySQL on Mac OS X since Leopard. Each time doing so by hand. Each ...