import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.HashSet; import java.util.Set; /** * Given an array of integers, find if the array contains any duplicates. Your function should return true if any value * appears at least twice in the array, and it should return false if every element is distinct. * <p> * Tags: Array, Hash Table * Similar Problems: (E) Contains Duplicate II, (M) Contains Duplicate III */ public class ContainsDuplicate { private ContainsDuplicate cd; public boolean containsDuplicate(int[] nums) { if (nums == null || nums.length <= 1) return false; Set<Integer> set = new HashSet<>(nums.length); for (int n : nums) { if (!set.add(n)) return true; } return false; } @Before public void setUp() { cd = new ContainsDuplicate(); } @Test public void testEdgeCases() { Assert.assertFalse(cd.containsDuplicate(null)); Assert.assertFalse(cd.containsDuplicate(new int[]{})); Assert.assertFalse(cd.containsDuplicate(new int[]{1})); } @Test public void testExamples() { Assert.assertFalse(cd.containsDuplicate(new int[]{1, 2})); Assert.assertTrue(cd.containsDuplicate(new int[]{1, 1})); } @After public void tearDown() { cd = null; } }