当前位置: 代码迷 >> 综合 >> leedcode:使数组唯一的最小增量
  详细解决方案

leedcode:使数组唯一的最小增量

热度:84   发布时间:2023-11-19 18:12:12.0

3.22日:使数组唯一的最小增量

给定整数数组A,每次move操作都会选择任意的A[i],并将其递增1,返回使A中的每个值都是唯一的最少操作次数。

输入:[3,2,1,2,1,7]——>输出:6

class Solution:def minIncrementForUnique(self, A):A.sort()A.append(100000)ans = taken = 0for i in range(1, len(A)):if A[i-1] == A[i]:taken += 1ans -= A[i]else:give = min(taken, A[i] - A[i-1] - 1)ans += give * (give + 1) // 2 + give * A[i-1]taken -= givereturn ans
class Solution {
    public int minIncrementForUnique(int[] A) {
    // 先排序Arrays.sort(A);int move = 0;// 遍历数组,若当前元素小于等于它的前一个元素,则将其变为前一个数+1for (int i = 1; i < A.length; i++) {
    if (A[i] <= A[i - 1]) {
    int pre = A[i];A[i] = A[i - 1] + 1;move += A[i] - pre;}}return move;}
}