Got a TLE using HashMap, it's supposed to be o(n)
public class Solution {
public boolean containsDuplicate(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int num : nums) {
if (map.get(num) != null) return true;
map.put(num, 0);
}
return false;
}
}
HashSet approach, no TLE
/**
* HashSet, HashMap, and HashTable
* both HashMap and HashTable implement the Map interface
* HashMap is non-synschronized but HashTable is synchronized thus can be used for multi-thread applications
* both of them allow duplicate keys
* HashSet, however, doesn't allow duplicate keys
* it has a add() function rather than put() function
*/
public class Solution {
public boolean containsDuplicate(int[] nums) {
HashSet<Integer> set = new HashSet<Integer>();
for (int num : nums) {
if(set.contains(num)) return true;
set.add(num);
}
return false;
}
}
Another approach, sort the array first, compare nums[i] and nums[i-1], if they are equal, then return true else return false
time complexity o(nlogn) b/c of the sort operation. BUT still faster than HashSet approach
public class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for (int i=1; i<nums.length; i++)
if (nums[i] == nums[i-1]) return true;
return false;
}
}
Conclusion, hash operations suck