问题描述
小R有一组橡皮泥士兵,它们的大小各不相同或非常接近。为了让每个士兵都更具独特性,小R希望确保所有士兵的大小都不相同。小R可以通过增加某些士兵的大小来实现这一目标。每次操作可以给某个士兵加一单位橡皮泥,以增加其大小。
给定士兵的数量n和每个士兵当前的大小的数组a,计算为了使所有士兵的大小都不同,至少需要增加多少单位橡皮泥。
测试样例
样例1:
输入:
n = 5 ,a = [1, 1, 2, 3, 3]
输出:5
样例2:
输入:
n = 6 ,a = [4, 4, 4, 5, 5, 6]
输出:11
样例3:
输入:
n = 7 ,a = [10, 20, 10, 30, 40, 30, 20]
输出:3
由于操作后每个士兵的数字不一样,我们可以使用set来记录这些数字。对每次添加进去的数组进行判断,如果存在就自增到符合条件位置,同时记录操作次数。
public class 独特橡皮泥士兵468 {
public static int solution(int n, int[] a) {
Set<Integer> set=new HashSet<>();
int res=0,temp;
for (int i = 0; i < a.length; i++) {
temp=a[i];
while(set.contains(temp)){
temp++;
res++;
}
set.add(temp);
}
return res;
}
}