使数组唯一的最小增量

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12545907.html

使数组唯一的最小增量(28min)

题目链接: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 操作是不能让数组的每个值唯一的。

题解:

         题意:真是看半天都没明白题目啥意思,还是看了别人手写板的示意图才明白。

                  题目意思是在给定一个数组要求:

                                                                     1.结果:让所有数组元素不相同。

                                                                     2.方法:通过把相同的数通过每次加一的方法,变为不同。

                                                                     3.返回值:返回至少需求加多少个1,能使数组中元素值都不相同。

        方法:排序后比较大小。

        思路:1.先把数组排序。

                   2.后面一个数组元素值和前面数组元素值做比较,数组后面值比前面值小时,每次加一,直到后面一个元素值比前面元素值大时停止加1.

排序后,数组后面值肯定大于等于前面数值,把数组后面数组加到刚大于前面数组时,重新放入数组,这时所加的1肯定是最小的。

代码如下:

class Solution {
    public int minIncrementForUnique(int[] A) {
        Arrays.sort(A);//先排序
        int len=0;
        for(int i=1;i<A.length;i++)
        {
            while(A[i]<=A[i-1])
            {
               // System.out.println(A[i]);
                A[i]=A[i]+1;
                len+=1;
            }

        }
        return len;
    }
}
原文地址:https://www.cnblogs.com/ping2yingshi/p/12545907.html