与设计新的数据结构相关的算法题:
- 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中的一些简单总结,没有过多的解释,如果有需要会增加更多的解释。
网友评论