📌  相关文章
📜  在只读数组中查找多个重复元素中的任何一个(1)

📅  最后修改于: 2023-12-03 15:23:31.654000             🧑  作者: Mango

在只读数组中查找多个重复元素中的任何一个

在程序开发中,我们经常需要查找一个只读数组中是否包含任何一个重复的元素。为了实现这个目标,我们可以使用以下的算法:

public static boolean containsDuplicates(int[] nums) {
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < nums.length; i++) {
        if (set.contains(nums[i])) {
            return true;
        }
        set.add(nums[i]);
    }
    return false;
}

这个算法的基本思想是使用一个set集合储存数组中的每个元素,如果在添加元素时发现set集合中已经包含了该元素,那么就说明数组中存在重复元素,返回true;否则将该元素添加到set集合中,继续扫描下一个元素。

这个算法的时间复杂度是O(n),空间复杂度也是O(n)。

实际上,我们并不需要找出数组中每个重复的元素,只需要找出任何一个重复元素就可以了。所以,我们可以在遍历数组时,直接返回第一个重复的元素即可:

public static int findDuplicate(int[] nums) {
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < nums.length; i++) {
        if (set.contains(nums[i])) {
            return nums[i];
        }
        set.add(nums[i]);
    }
    throw new IllegalArgumentException("No duplicates found in array.");
}

这个算法和前面的算法基本一致,只不过在遇到第一个重复元素时就直接返回。如果没有重复元素,则会抛出一个异常。

这个算法的时间复杂度还是O(n),空间复杂度也是O(n)。