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