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
הערך עבור כל put, 0 עבור כל get
מחזירה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 עבור פעולת put, ו-values[i] == 0 עבור פעולת get.

דוגמאות

קלט
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"]