面接の演習で提起された問題を解決しようとしています。面接では解決できなかったので、教えていただけると助かります。
問題は:
整数を取り、最後の 10 分間に呼び出されたメソッドの最大値である整数を返すメソッドを持つクラスを作成します。
私が理解していることから、メソッドが最後の 10 分間に呼び出されたすべての値を保存する必要があります。このメソッドは 1 秒間に数回呼び出される可能性があるため、値は効率的なデータ構造に格納する必要があります。
このためにどのデータ構造がより効率的であるべきかについて何か提案はありますか? また、これはタイム ローリング ウィンドウであるため、期限切れになった値をクリーンアップするにはどうすればよいですか?
使用されるデータ構造に応じて、最大値を取得する最良の方法は何ですか?
私はいくつかの基本コードを持っています:
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;
}