Как реализовать кеш LRU в Java с ограничением в 5 элементов?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как реализовать кеш LRU в Java с ограничением в 5 элементов?

Сообщение Anonymous »

Пусть функция LRUCache(strArr) принимает массив символов, хранящийся в strArr, который будет содержать символы от A до Z в некотором произвольном порядке, и определить, какие элементы все еще остаются в виртуальном кэше, который может содержать до 5 элементов с реализованным алгоритмом кэширования LRU.
Например: если 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"].
Теперь этапы кэширования завершены, и ваша программа должна вернуть порядок кэша с элементами, объединенными в строку, разделенную дефисом.Поэтому для приведенного выше примера ваша программа должна возвращать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»