LeetCode——945.使数组唯一的最小增量(JavaScript)
给定整数数组 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
思路
先将数组排序,举例
A = [1,1,2,2,3,7]
唯一:[1,2,3,4,5,7]
增加 1 + 1 + 2 + 2 = 6 次
目的就是算出这两个数组的差的总和。
我们用一个变量 min 来表示当前元素为了满足数组唯一所要变成的最小的值,初始为 Number.MIN_SAFE_INTEGER,那么开始循环排序过的 A 数组吧!
首先让 min ++,然后判断 min 与 当前元素 val 的大小,若
- 若 min < val,说明这个元素不需要变化,让 min = val 即可;
- 否则,就要让这个元素增加到 min,差值为 min - val,累加这个差值。
总代码:
/** * @param {number[]} A * @return {number} */
var minIncrementForUnique = function(A) {
let min = Number.MIN_SAFE_INTEGER;
let res = 0;
A = A.sort((a, b) => a - b)
A.forEach((val, index) => {
min ++;
if (min < val) {
min = val;
} else {
res += min - val;
}
})
return res;
};