fork download
  1. def getStaleSkillCount(numSkills, requestLogs, queryTimes, timeWindow):
  2. from collections import defaultdict
  3.  
  4. # Sort request logs by timestamp
  5. requestLogs.sort(key=lambda x: x[1])
  6.  
  7. # Attach index to each query for placing results in correct order
  8. indexed_queries = sorted([(qt, i) for i, qt in enumerate(queryTimes)])
  9. result = [0] * len(queryTimes)
  10.  
  11. m = len(requestLogs)
  12. left = right
  13. right = left
  14.  
  15. # Use a dict to track counts of skillIDs seen in the current window
  16. active_skills = defaultdict(int)
  17.  
  18. for qt, idx in indexed_queries:
  19. start_time = qt - timeWindow
  20.  
  21. # Expand the right side of the window
  22. while right < m and requestLogs[right][1] <= qt:
  23. skill_id, ts = requestLogs[right]
  24. if ts >= start_time:
  25. active_skills[skill_id] += 1
  26. right += 1
  27.  
  28. # Shrink the left side of the window
  29. while left < m and requestLogs[left][1] < start_time:
  30. skill_id, ts = requestLogs[left]
  31. if active_skills[skill_id] > 0:
  32. active_skills[skill_id] -= 1
  33. if active_skills[skill_id] == 0:
  34. del active_skills[skill_id]
  35. left += 1
  36.  
  37. result[idx] = numSkills - len(active_skills)
  38.  
  39. return result
  40.  
Success #stdin #stdout 0.04s 8960KB
stdin
6
4
2
3 2
3]]
4 3
2 6
6 3
3
3
2
6
2
stdout
Standard output is empty