Has Duplicates - codepath/compsci_guides GitHub Wiki

Unit 2 Session 2 (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • Will nums ever be empty?
    • Possibly! In that case, there are no valid duplicates, so your program should return False.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Use a dictionary to keep track of the most recent index for each element. When we find an element for a 2nd time, we can check if its current index is within k of its most recent index.

1) Create an empty dictionary to track recent indices
2) For each index in nums
  a) If the value is already in recent dict, compare indices
     i) If the index - recent index <= k, 
        we found a valid duplicate and can return True
  b) Update the dict with the current index
3) If we didn't find anything, return False

I-mplement

def hasDuplicates(nums, k):
    recent_index = {}
    for i in range(len(nums)):
        if nums[i] in recent_index:
            diff = i - recent_index[nums[i]]
            if diff <= k:
                return True
        recent_index[val] = i
    return False