Count Negatives - codepath/compsci_guides GitHub Wiki

Unit 4 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.

  • What happens if k is greater than the length of the list?
    • If k is greater than the list length, the function should return an empty list as no sublists of size k can be formed.
  • How does the function handle cases where all numbers are positive?
    • If all numbers are positive, each element in the returned list should be 0, indicating no negative numbers in any sublist.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Implement a sliding window to count negative numbers within each window of size k in the list.

1) Initialize a list `result` to store the count of negative numbers for each window.
2) Use a pointer `start` to denote the beginning of each window.
3) Initialize a variable `count` to keep track of the number of negative numbers in the current window.
4) Iterate over the list using an index `i`:
  a) If the current number is negative, increase the `count`.
  b) When the window size reaches k (i.e., i - start + 1 == k):
     i) Append `count` to `result`.
    ii) If the number at the `start` of the window is negative, decrease the `count`.
   iii) Increment `start` to slide the window right.
5) Return the `result` list.

⚠️ Common Mistakes

  • Forgetting to decrement the count of negatives when sliding the window and removing a negative number.
  • Incorrectly initializing or updating the start index, leading to windows of incorrect size.

I-mplement

def count_negatives(lst, k):
    result = []
    start = 0
    count = 0
    
    for i in range(len(lst)):
        if lst[i] < 0:
            count += 1
        
        if (i - start + 1 == k):
            result.append(count)
            if lst[start] < 0:
                count -= 1
                
            start += 1
    
    return result