Here is the optimal hash set solution:
function containsDuplicate(nums)
seen := empty hash set
for each num in nums
if num in seen then
return true
add num to seen
return false
Time: since hash set operations are average. Space: for the set. This is the best time complexity possible since you must examine each element at least once.