算法题设计数据结构(面试准备一)

与设计新的数据结构相关的算法题:

  • LRU Cache https://leetcode.com/problems/lru-cache/solution/
    1. Java数据结构LinkedHashMap
    2. 思路:使用double linked list表示每个元素,每次访问元素时将元素放置到链表的head
  • 设计一个minStack https://leetcode.com/problems/min-stack/
    1. 思路一:使用两个stack数据结构,一个保存元素,另一个保存当前最小值
    2. 思路二:使用链表
class Node{
  int val;
  int max;
  Node next;
}
  1. 本题比较简单,因为只需要pop正常元素,对min值只需要返回即可不需要pop min
  • max stack https://leetcode.com/problems/max-stack/ 在min stack的基础上需要pop处最大的元素
    1. 思路:在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/
  1. 初始思路:类似min stack和max stack实现一个链表保存元素,max heap保存每个元素出现次数的数据结构,虽然确实可以实现,但是复杂度较高
  2. Leetcode官方solution中给出了一个非常elegant的解法:https://leetcode.com/problems/maximum-frequency-stack/solution/

说明:本系列文章为LeeCode,Cracking the coding interview中的一些简单总结,没有过多的解释,如果有需要会增加更多的解释。

你可能感兴趣的:(算法题设计数据结构(面试准备一))