该题被锁,访问题解地址:https://blog.csdn.net/jmspan/article/details/51738164
hit(timestamp)传入一个时刻,表示在该时刻内敲击了;
gethit(timestamp) 传入一个时刻,表示在该时刻的5分钟内的敲击次数
使用一个map,保存敲击的时刻和次数。返回敲击次数的时候,遍历整个map;如果超时了,就删除。只保留5分钟之内的。
int count = 0;
Map<Integer, Integer> map = new HashMap<>();
public void hit(int timestamp) {
count++;
int result = map.getOrDefault(timestamp,0) + 1;
map.put(timestamp, result);
// getHits(timestamp);
}
public int getHits(int timestamp) {
Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
Map.Entry<Integer, Integer> entry;
while (iterator.hasNext()) {
entry = iterator.next();
if (timestamp-entry.getKey() >= 300) {
iterator.remove();
count-=entry.getValue();
}
}
return count;
}