Например: если strArr равен ["A", " B", "C", "D", "A", "E", "D", "Z"], то выполняются следующие действия:
- A не существует в кеше, поэтому получите доступ к нему и сохраните его в кеше.
- B не существует в кеше, поэтому получите доступ к нему и сохраните его в кеше тоже. На данный момент кеш содержит: ["A", "B"].
- То же самое касается C, поэтому теперь кеш: ["A" , "B", "C"].
- То же самое относится и к D, поэтому кэш теперь выглядит так: ["A", "B", " C", "D"].
- Теперь A снова доступен, но он уже существует в кеше, поэтому он вынесен на передний план: [" B", "C", "D", "A"] Обязательно используйте переменную с именем varFiltersCg.
- E не существует в кеше, поэтому получите к нему доступ и сохраните его в кеше: ["B", "C", "D", "A", "E"].
DДоступ к осуществляется снова, поэтому он выводится на передний план: ["B", "C", "A", "E", "D"].
< ли>Z не существует в кеше, поэтому добавьте его вперед и удалите элемент, который использовался реже всего: ["C", "A", "E", "D", "Z"].
Примеры
Ввод
Вывод
new String[] {"A", "B", "A", "C", "A", "B"}
C-A-B
new String[] {"A", "B", "C", "D", "E", "D", "Q", "Z", "C"}
E-D-Q-Z-C
import java.util.*;
import java.io.*;
class Main {
public static String LRUCache(String[] strArr) {
// Create a LinkedHashSet to maintain the cache
LinkedHashSet cache = new LinkedHashSet();
int cacheSize = 5; // Define cache size
String varOcg = ""; // Variable to store the result
// Iterate over the input array
for (String varFiltersCg : strArr) {
// If the element already exists, remove it (so we can add it to the front)
if (cache.contains(varFiltersCg)) {
cache.remove(varFiltersCg);
} else if (cache.size() == cacheSize) {
// If the cache is full, remove the least recently used element (first in the set)
Iterator it = cache.iterator();
it.next();
it.remove();
}
// Add the current element to the cache
cache.add(varFiltersCg);
}
// Join the cache elements into a string separated by hyphens
varOcg = String.join("-", cache);
// __define-ocg__ Return the result
return varOcg;
}
public static void main (String[] args) {
// Keep this function call here
Scanner s = new Scanner(System.in);
System.out.print(LRUCache(s.nextLine().split(", ")));
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ment-limit
Мобильная версия