設計複雜度為O 1 的LRU快取結構

2022-03-03 19:38:24 字數 915 閱讀 4181

題目描述

設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能

[要求]

示例1

輸入

複製[[1,1,1],[1,2,2],[1,3,2],[2,1],[1,4,4],[2,2]],3

輸出複製

[1,-1]

說明第一次操作後:最常使用的記錄為("1", 1)

第二次操作後:最常使用的記錄為("2", 2),("1", 1)變為最不常用的

第三次操作後:最常使用的記錄為("3", 2),("1", 1)還是最不常用的

第四次操作後:最常用的記錄為("1", 1),("2", 2)變為最不常用的

第五次操作後:大小超過了3,所以移除此時最不常使用的記錄("2", 2),加入記錄("4", 4),並且為最常使用的記錄,然後("3", 2)變為最不常使用的記錄

完整**
#include class solution else if(operators[i][0] == 2)

}return result;

}void set(int key, int value, int k)

map[key] = value;

// 這個時候應該先查詢cache中是否存在key,如果存在就把它刪除後放到尾部

for(int i = 0; i < cache.size(); i++)

}// 放到尾部

cache.push_back(key);

}int get(int key)

// 這個時候應該先查詢cache中是否存在key,如果存在就把它刪除後放到尾部

for(int i = 0; i < cache.size(); i++)

}return map[key];

}};

時間複雜度為O(1)的跳台階

分析 這是一道典型的動態規劃的題目,我們可以這樣想,我們最後一步可以跳1級,也可以跳2級,跳 跳n級,我們用最後一步跳一級來舉例子,假設最後一步跳1級,那還剩下n 1個台階,又可以分為最後一步跳1級,2級 直到n 1級。好啦,就分析到這裡,我們可以看到當我們最後一步跳一級的時候,剩下的n 1級台階又...

刪除鍊錶結點(時間複雜度為O 1 ))

題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted 分析 這是一道廣為流傳的google面試題,能有效考察...

實現鍊錶逆序,空間複雜度為O(1)

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。include using namespace std struct linknode linknode reverselink li...