與設計新的數據結構相關的算法題:
- LRU Cache https://leetcode.com/problems/lru-cache/solution/
- Java數據結構LinkedHashMap
- 思路:使用double linked list表示每個元素,每次訪問元素時將元素放置到鏈表的head
- 設計一個minStack https://leetcode.com/problems/min-stack/
- 思路一:使用兩個stack數據結構,一個保存元素,另一個保存當前最小值
- 思路二:使用鏈表
class Node{
int val;
int max;
Node next;
}
- 本題比較簡單,因為只需要pop正常元素,對min值只需要返回即可不需要pop min
- max stack https://leetcode.com/problems/max-stack/ 在min stack的基礎上需要pop處最大的元素
- 思路:在min stack的基礎上使用雙端鏈表表示每一個元素,有利于刪除最大元素
private static class Node {
int val;
Node max;
Node prev;
Node next;
Node(int val) {
this.val = val;
}
}
- FreqStack,不同于min stack和max stack這里要求每次pop出的元素為出現次數最多的元素https://leetcode.com/problems/maximum-frequency-stack/
- 初始思路:類似min stack和max stack實現一個鏈表保存元素,max heap保存每個元素出現次數的數據結構,雖然確實可以實現,但是復雜度較高
- Leetcode官方solution中給出了一個非常elegant的解法:https://leetcode.com/problems/maximum-frequency-stack/solution/
說明:本系列文章為LeeCode,Cracking the coding interview中的一些簡單總結,沒有過多的解釋,如果有需要會增加更多的解釋。