ARTS是什麼?
Algorithm:每週至少作一個leetcode的算法題;
Review:閱讀並點評至少一篇英文技術文章;
Tip:學習至少一個技術技巧;
Share:分享一篇有觀點和思考的技術文章。javascript
題目一:
java
LC 146. LRU Cache node
解答:
git
設計一個 LRU 緩存,因爲緩存容量有限,所以存在末尾淘汰,容量滿了,最不經常使用的(Least Recently Used)元素會被移出緩存。要保證查詢和增添元素的時間複雜度都是 。這道題看了一下網上的解法,貌似用數組也是能夠實現的,可是數組裏面還要存一個變量來表示該元素的新舊程度,固然時間複雜度的話就不是 的了。常規的實現方法是雙向鏈表加上散列,固然對於 Java 來講還可使用 LinkedHashMap 這樣的數據結構,就會讓實現變得很是簡單,其實 LinkedHashMap 內部已經幫你實現好了不少東西,你不用在手動實現,這裏仍是用最原始的方法來一步一步實現:算法
實現參考代碼:segmentfault
private class Node {
Node next, prev;
int key, value;
Node(int key, int value) {
this.key = key;
this.value = value;
}
}
private Node head;
private Node tail;
private int capacity;
private Map<Integer, Node> map;
public LRUCache(int capacity) {
head = new Node(-1, -1);
tail = new Node(-1, -1);
tail.prev = head;
head.next = tail;
this.capacity = capacity;
map = new HashMap<Integer, Node>();
}
public int get(int key) {
if (!map.containsKey(key)) {
return -1;
}
Node cur = map.get(key);
deleteNode(cur);
add2Head(cur);
return cur.value;
}
public void put(int key, int value) {
if (map.containsKey(key)) {
Node cur = map.get(key);
cur.value = value;
deleteNode(cur);
add2Head(cur);
} else {
if (map.size() == capacity) {
map.remove(tail.prev.key);
deleteNode(tail.prev);
}
Node newNode = new Node(key, value);
add2Head(newNode);
map.put(key, newNode);
}
}
private void add2Head(Node node) {
node.next = head.next;
head.next.prev = node;
node.prev = head;
head.next = node;
}
private void deleteNode(Node node) {
node.prev.next = node.next;
node.next.prev = node.prev;
}
複製代碼
在 medium 上的一篇關於 Unit test 斷言的文章:
數組
Rethinking Unit Test Assertions緩存
測試對於代碼的重要性不言而喻,其中斷言是一個測試的關鍵,做者在文章的開始就給出,對於每個 unit test 咱們都要去問這 5 個問題:數據結構
文章中指出斷言越簡單越好,最好就只用 deep equal,其餘的複雜的斷言形式沒有必要,並且會把 unit test 弄得過於複雜,後期根據需求變化更改 test 的話就會不太容易框架
此次分享兩個更改 Mac 工做環境的小設置:
去到 Mac 系統設置的 keyboard 欄把 「Key Repeat」 和 「Delay Until Repeat」 兩項都設置成最快和響應時間最短,好處是打字和敲代碼變得比以前流暢很多,並且用上下左右移動光標的時候更加的快捷和方便
使用 iTerms + Oh-my-zsh 去更改 Terminal 的顯示問題,Mac 自帶的 Terminal 無法顯示 git 的分支之類的信息,設置完成以後感受比以前看的更加的美觀和舒服,配置教程以下:
效果圖:
股票買賣問題是 LeetCode 的一個系列問題,這裏總結了一個動態規劃的狀態定義的框架,用來解決這一系列的問題