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 的一个系列问题,这里总结了一个动态规划的状态定义的框架,用来解决这一系列的问题