public static int[] isthereDuplicates(int[] combination) {
Set<Integer> foundedNumbers = new HashSet<>();
for (int i= 0; index < combination.length; i++) {
if (foundedNumbers.contains(combination[i])) {
combination[i] -= 1;
} else {
foundedNumbers.add(combination[i]);
}
return combination;
}
我需要找到并替换数字数组中的重复项。数字数组也是随机选择1到40之间的7个数字。如果我有一个副本,我提出的这个代码,但当我有几个例如我有1,14,20,1,38,1,5。它将在中间1改变,但对于第二个1,它将保持不变。
答案 0 :(得分:0)
我相信这解决了你的问题:
首先确定数组中的数字,然后将它们记录为尚未找到。
然后你查看数字,当你找到一个未找到的数字时,你将它标记为已找到。
当你再次找到这个数字时,你会做任何你想做的事情(在这种情况下,我把它放到一个值-1)
public static int[] duplicates(int[] combination) {
HashMap<Integer, Boolean> foundNumbers = new HashMap<>();
for (int i : combination) {
if(foundNumbers.containsKey(i)) continue;
foundNumbers.put(i, false);
}
for (int i = 0; i < combination.length; i++) {
if(!foundNumbers.get(combination[i])) {
foundNumbers.put(combination[i], true);
} else {
combination[i] = -1;
}
}
return combination;
}
答案 1 :(得分:0)
您的代码似乎适用于小修改和位转换。
public static int[] imaliDuplikata(int[] combination) {
Random r = new Random();
Set<Integer> foundeNumbers = new HashSet<>();
for (int i = 0; i < combination.length; i++) {
if (foundeNumbers.contains(combination[i])) {
combination[i] = r.nextInt(40);
} else {
foundeNumbers.add(combination[i]);
}
}
return combination;
}
以这种方式执行:
int[] i = {1,14,20,1,38,1,5};
System.out.println(Arrays.toString(imaliDuplikata(i)));
您将更换所有次重复的数字。
各种处决:
[1, 14, 20, 0, 38, 35, 5]
[1, 14, 20, 11, 38, 1, 5]
[1, 14, 20, 22, 38, 30, 5]
[1, 14, 20, 37, 38, 39, 5]