package com.interview.stackqueue; import java.util.LinkedList; import java.util.Queue; public class RealTimeCounter { private Queue<Long> secQueue = new LinkedList<Long>(); private long secCount; public void add(long currentTimeInMills){ while(secQueue.size() > 0 && currentTimeInMills - 1000 > secQueue.peek()){ secCount--; secQueue.poll(); } secCount++; secQueue.offer(currentTimeInMills); } public long getCallsInLastSec(long currentTimeInMills){ while(secQueue.size() > 0 && currentTimeInMills - 1000 > secQueue.peek()){ secCount--; secQueue.poll(); } return secCount; } public static void main(String args[]){ RealTimeCounter rtc = new RealTimeCounter(); rtc.add(100); rtc.add(300); rtc.add(550); System.out.println(rtc.getCallsInLastSec(780)); System.out.println(rtc.getCallsInLastSec(1280)); rtc.add(1540); System.out.println(rtc.getCallsInLastSec(1551)); rtc.add(1570); System.out.println(rtc.getCallsInLastSec(2651)); } }