← Усі задачіJavaScript · Senior

LRUCache

Напишіть клас LRUCache(capacity) - кеш, який у разі переповнення витісняє елемент, до якого найдовше не зверталися.

get(key) повертає значення або undefined і позначає ключ як нещодавно використаний. put(key, value) додає або оновлює значення; це теж використання. Властивість size - поточна кількість елементів. Обидві операції мають працювати за O(1).

Тести (5)

  1. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('b', 2);
    expect(c.get('a')).toBe(1);
    c.put('c', 3);
    expect(c.get('b')).toBe(undefined);
    expect(c.get('a')).toBe(1);
    expect(c.get('c')).toBe(3);
  2. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('a', 10);
    c.put('b', 2);
    expect(c.size).toBe(2);
    expect(c.get('a')).toBe(10);
  3. const c = new LRUCache(2);
    c.put('a', 1);
    c.put('b', 2);
    c.put('a', 3);
    c.put('c', 4);
    expect(c.get('b')).toBe(undefined);
    expect(c.get('a')).toBe(3);
  4. const c = new LRUCache(1);
    c.put('x', 0);
    expect(c.get('x')).toBe(0);
    c.put('y', null);
    expect(c.get('x')).toBe(undefined);
    expect(c.get('y')).toBe(null);
  5. const c = new LRUCache(3);
    expect(c.get('missing')).toBe(undefined);
    expect(c.size).toBe(0);