需要把超过10次的点进行记录
时间: 2024-03-09 15:46:11 浏览: 17
如果您需要将超过10次触发的数据点也进行记录,可以在代码中进行一些修改。具体来说,修改判断条件,当队列中的数据点数量大于窗口大小时,不仅需要将队列头部的时间戳移除,同时需要判断当前时间戳所在的一秒内数据点是否超过了10次,如果超过了10次,则将当前时间戳也记录到结果列表中。具体实现代码如下:
```java
public class TimeSeriesAnalyzer {
public static List<Long> getTenTimesTriggerPoints(List<Long> timestamps) {
List<Long> result = new ArrayList<>();
Map<Long, Integer> map = new HashMap<>();
int windowSize = 10;
Queue<Long> queue = new LinkedList<>();
for (Long ts : timestamps) {
queue.offer(ts);
map.put(ts, map.getOrDefault(ts, 0) + 1);
if (queue.size() > windowSize) {
Long head = queue.poll();
int count = map.get(head);
if (count == 1) {
map.remove(head);
} else {
map.put(head, count - 1);
}
}
if (queue.size() == windowSize) {
Long head = queue.peek();
if (ts - head <= 1000) {
int count = map.getOrDefault(ts, 0);
if (count >= 10) {
result.add(ts);
}
}
}
}
return result;
}
}
```
这里我们使用了一个 Map 来记录每个时间戳在滑动窗口中出现的次数。当队列头部的时间戳被移除时,我们从 Map 中读取该时间戳出现的次数,并将其减1,如果次数已经减到0,则将该时间戳从 Map 中删除。在滑动窗口达到窗口大小之后,对于每个新加入的时间戳,我们从 Map 中读取该时间戳出现的次数,如果次数超过10次,则将该时间戳记录到结果列表中。