此博客链接: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; } }