剑指Offer-面试题03- 数组中重复的数字

文章目录

  • 剑指Offer-面试题03- 数组中重复的数字
  • 解法与思路

剑指Offer-面试题03- 数组中重复的数字

找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1:
输入:

[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3 

限制:
2 <= n <= 100000

解法与思路

Set集合的基本特征是不记录添加顺序,不允许元素重复。
所以我们可以把数组的元素添加到Set集合中,如果不包含指定元素,返回true。如果包含指定元素,返回false。

public class Test {

	public int findRepeatNumber(int[] nums) {
		Set<Integer> set = new HashSet<Integer>();
		for (int i : nums) {
			if (!set.add(i))
				return i;
		}
		return 0;
	}

	public static void main(String[] args) {
		int[] nums = {0,2, 3, 1, 2, 5, 3};
		Test t = new Test();
		System.out.println(t.findRepeatNumber(nums));
	}

}

set.add()方法,如果不包含指定元素。返回true。
true if this set did not already contain the specifiedelement

执行用时 :7 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗 :61.5 MB, 在所有 Java 提交中击败了100.00%的用户

你可能感兴趣的:(java,零基础学数据结构,acm)