📅  最后修改于: 2023-12-03 15:11:18.617000             🧑  作者: Mango
在某些情况下,我们需要将数组中的重复元素替换为大于最大值的值。这可以通过以下几种方式来实现。
代码实现如下:
public static int[] replaceDuplicatesUsingSet(int[] arr) {
Set<Integer> set = new HashSet<>();
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (!set.add(arr[i])) {
max = Math.max(max, arr[i]);
arr[i] = max + 1;
} else {
max = Math.max(max, arr[i]);
}
}
return arr;
}
代码实现如下:
public static int[] replaceDuplicatesUsingMap(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (map.containsKey(arr[i])) {
max = Math.max(max, arr[i]);
arr[i] = max + 1;
} else {
map.put(arr[i], i);
max = Math.max(max, arr[i]);
}
}
return arr;
}
代码实现如下:
public static int[] replaceDuplicatesUsingSorting(int[] arr) {
Arrays.sort(arr);
int max = Integer.MIN_VALUE;
for (int i = 1; i < arr.length; i++) {
if (arr[i] == arr[i - 1]) {
max = Math.max(max, arr[i - 1]);
arr[i] = max + 1;
}
}
return arr;
}
以上三种方法均可以用于替换数组中的重复元素。第一种方法使用了 HashSet 来判断元素是否重复,第二种方法使用了 HashMap 来存储元素和其索引的对应关系,第三种方法则是基于排序的方法。根据实际情况,选择适当的方法即可。