我正在尝试解决在面试练习中提出的问题。我在面试期间无法解决它,所以我请求您的帮助来解决这个问题。
问题是:
编写一个带有一个方法的类,该方法接受一个整数并返回整数,该整数是该方法在过去十分钟内被调用的最大值。
据我了解,我必须存储过去 10 分钟调用该方法的所有值。这些值应该存储在一个有效的数据结构中,因为这个方法每秒可能会被调用几次。
您对哪种数据结构应该更有效有什么建议吗?另外,由于这是一个时间滚动窗口,我如何清除过期的值?
根据使用的数据结构,获得最大值的最佳方法应该是什么?
我有一些基本代码:
private final static ScheduledExecutorService EXECUTOR_SERVICE = Executors.newSingleThreadScheduledExecutor();
private static List<Integer> values = new ArrayList<Integer>();
public int method(final int value){
values.add(value);
// Task to remove the key-value pair
Runnable task = new Runnable() {
@Override
public void run() {
values.remove(value);
}
};
// Schedule the task to run after the delay
EXECUTOR_SERVICE.schedule(task, 60, TimeUnit.SECONDS);
//TODO get the max value
return 1;
}