java数组查找重复项并替换它们

时间:2017-02-27 14:48:56

标签: java arrays

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,它将保持不变。

2 个答案:

答案 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]