Menu
CoddyTech

LRU Cache

أنشئ ذاكرة تخزين مؤقت تحتوي على capacity مفاتيح كحد أقصى. تُرجع get key قيمة المفتاح، أو -1 إذا لم يكن مخزّنًا مؤقتًا. تخزّن put key value القيمة، مستبدلةً أي قيمة أقدم؛ وإذا كان المفتاح جديدًا وكانت الذاكرة ممتلئة، فإنها تُخرج أولًا المفتاح الأقل استخدامًا مؤخرًا. يُحتسب العثور على المفتاح عند تنفيذ get، وكل put، استخدامًا.

العملية i هي ops[i] ("get" أو "put") على المفتاح keys[i]، مع القيمة values[i] (0 لعملية get). نفّذها بالترتيب على ذاكرة تخزين مؤقت فارغة، وأعِد سلسلة نصية واحدة لكل عملية: "null" لعملية put، والقيمة أو "-1" لعملية get.

الدالة

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
أكبر عدد من المفاتيح التي يمكن أن تحتفظ بها ذاكرة التخزين المؤقت في الوقت نفسه
opsstring-array
العمليات، بالترتيب الذي تُنفَّذ به
keysinteger-array
المفتاح الذي تعمل عليه كل عملية
valuesinteger-array
القيمة لكل عملية وضع، و0 لكل عملية جلب
تُرجعstring-array
إجابة واحدة لكل عملية، كنص

القيود

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • كل ops[i] إما get أو put.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109 لعملية الإضافة، وvalues[i] == 0 لعملية الاسترجاع.

أمثلة

المدخلات
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
المخرجات
["null", "null", "10", "null", "-1", "30"]
الشرح
تجعل عملية get المفتاح 1 الأكثر استخدامًا مؤخرًا، لذا فإن put 3 تُخرج المفتاح 2: تُرجع get 2 القيمة "-1"، وتُرجع get 3 القيمة "30".
challenge icon

سؤال إضافي

كيف ستغيّر ذاكرة التخزين المؤقت لإخلاء المفتاح الأقل استخدامًا بدلًا من ذلك، مع كسر التعادل باختيار الأقل استخدامًا مؤخرًا، مع الحفاظ على تعقيد O(1) لكل عملية؟

إعادة ضبط الشيفرة
def lruCacheOps(capacity, ops, keys, values):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

capacity = 2
ops = ["put", "put", "get", "put", "get", "get"]
keys = [1, 2, 1, 3, 2, 3]
values = [10, 20, 0, 30, 0, 0]

الإخراج المتوقع

["null", "null", "10", "null", "-1", "30"]