Home
Zarak Shah

Single for loop with O(n²) time complexity

Look at this code for problem 217. Contains Duplicate:

def containsDuplicate(nums: list[int]) -> bool:
  map = [] * len(nums)
  for num in nums:
    if num in map: return True
    map.append(num)
  return False

The solution passes 65/77 test cases and appears linear, but encounters Time Limit Exceeded (TLE) errors — surprising for a single loop.

Key Issues

1. Flawed Initialization

map = [] * len(nums) results in an empty list. Multiplying an empty list by any number yields an empty list, not a pre-sized array.

2. Inefficient Search

The in operator on lists performs a linear scan with O(n) complexity, checking each element sequentially.

3. Combined Inefficiency

The outer loop runs n times; the in operator inside performs up to n comparisons per iteration, resulting in O(n²) overall complexity.

Solution Using Sets

def containsDuplicate(nums: list[int]) -> bool:
    seen = set()
    for num in nums:
        if num in seen:  # O(1) lookup
            return True
        seen.add(num)   # O(1) add
    return False

Sets use hash tables for O(1) average-case lookups and insertions, reducing overall complexity to O(n).

·