遇到一道面試題,不使用map和set實現lru,要求get的時間複雜度為o(logn),put的時間複雜度不超過o(n)。想到了用arraylist來實現,儲存有序的key。然而牽涉add節點,在保證有序的情況下通過插入排序在arraylist中插入乙個新節點,時間複雜度不能保證o(n),粗略寫了乙個**,供大家提出一些建議。
class lrucache}private int capacity;
private listlist;
private int getid;
private listnode tail;
private listnode head;
public lrucache(int k)
// 二分查詢
public int search(int key) else if (node.key < key) else
}return -1;
}// get
public int get(int key)
listnode node = list.get(getid);
node.pre.next = node.next;
node.next.pre = node.pre;
addtotail(node);
return node.val;
}// put
public void put(int key, int val)
listnode node = new listnode(key, val);
addtotail(node);
int i = 0;
for (; i < list.size(); ++i)
}if (i == list.size()) list.add(node);
if (list.size() > capacity)
}public void addtotail(listnode node)
}
Map和Set簡單使用
map 和set的底層就是紅黑樹,map是k,v模型,而set是k模型。以上就是map的內部實現的成員函式,構造,插入刪除,等。map作為k,v模型,可以有很多用途,比如實現乙個字典。map實現乙個字典 include using namespace std include include int ...
Map和Set簡單使用
map 和set的底層就是紅黑樹,map是k,v模型,而set是k模型。以上就是map的內部實現的成員函式,構造,插入刪除,等。map作為k,v模型,可以有很多用途,比如實現乙個字典。map實現乙個字典 include using namespace std include include int ...
map和set的使用和原理
我們學習過順序容器如vecor,list等,它們中的元素是按照在容器中的位置來順序儲存和訪問的。而接下來要學習的關聯容器則有根本的不同,它們中的元素是按關鍵字來儲存和訪問的。在 c primer 中列舉了標準庫中的8個關聯容器,如下 關聯容器支援高效的關鍵字查詢和訪問,我們在這裡介紹兩個主要的關聯容...