old_contents: # Time:  O(1), amortized
  # Space: O(k), k is the count of seconds.
  
  from collections import deque
  
  class HitCounter(object):
  
      def __init__(self):
          """
          Initialize your data structure here.
          """
          self.__k = 300
          self.__dq = deque()
          self.__count = 0
  
      def hit(self, timestamp):
          """
          Record a hit.
          @param timestamp - The current timestamp (in seconds granularity).
          :type timestamp: int
          :rtype: void
          """
          self.getHits(timestamp)
          if self.__dq and self.__dq[-1][0] == timestamp:
              self.__dq[-1][1] += 1
          else:
              self.__dq.append([timestamp, 1])
          self.__count += 1
  
      def getHits(self, timestamp):
          """
          Return the number of hits in the past 5 minutes.
          @param timestamp - The current timestamp (in seconds granularity).
          :type timestamp: int
          :rtype: int
          """
          while self.__dq and self.__dq[0][0] <= timestamp - self.__k:
              self.__count -= self.__dq[0][1]
              self.__dq.popleft()
          return self.__count
  
  # Your HitCounter object will be instantiated and called as such:
  # obj = HitCounter()
  # obj.hit(timestamp)
  # param_2 = obj.getHits(timestamp)
  
new_contents: # Time:  O(1), amortized
  # Space: O(k), k is the count of seconds.
  
  from collections import deque
  
  class HitCounter(object):
  
      def __init__(self):
          """
          Initialize your data structure here.
          """
          self.__k = 300
          self.__dq = deque()
          self.__count = 0
  
      def hit(self, timestamp):
          """
          Record a hit.
          @param timestamp - The current timestamp (in seconds granularity).
          :type timestamp: int
          :rtype: void
          """
          self.getHits(timestamp)
          if self.__dq and self.__dq[-1][0] == timestamp:
              self.__dq[-1][1] += 1
          else:
              self.__dq.append([timestamp, 1])
          self.__count += 1
  
      def getHits(self, timestamp):
          """
          Return the number of hits in the past 5 minutes.
          @param timestamp - The current timestamp (in seconds granularity).
          :type timestamp: int
          :rtype: int
          """
          while self.__dq and self.__dq[0][0] <= timestamp - self.__k:
              self.__count -= self.__dq.popleft()[1]
          return self.__count
  
  # Your HitCounter object will be instantiated and called as such:
  # obj = HitCounter()
  # obj.hit(timestamp)
  # param_2 = obj.getHits(timestamp)
  
subject: Update design-hit-counter.py