LeetCode栈、队列与堆
Ban
ChangAn University- 225:使用队列实现栈(Easy)(栈、队列)
- 使用栈实现队列(East)(栈、队列)
- 包含min函数的栈(Easy)(栈)
- 合法的出栈序列(Medium)(栈、队列)
- 简单的计算器(hard)(栈)
- 数组中第K大的数(Easy)(堆)
- 寻找中位数(hard)(堆)
预备知识——栈与队列
栈
队列
255 Implement Stack using Queues (Easy)
为了让queue的pop()和stack的pop()位置对应,所以我们的内部队列要倒着存
232 Implement Queue using Stacks (Easy)
155 Min Stack (Easy)
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
设计算法复杂度为O(1)的栈
创建一个最小值栈,存储各个状态的最小值
Leetcode 946 (Medium)
验证栈序列 (Leetcode 946) 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。
224 简单计算器(Hard)
Implement a basic calculator to evaluate a simple expression string
The expression string may contain open(
and closing parenthess )
, the plus +
or minus sign -
, non-negative integers and empty space
.
设计一个计算器,输入一个字符串存储的数学表达式,可以计算包括 ( ) + - 四种符号的数学表达式,输入的数学表达式字符串保证是合法的。输入的数学表达式中可能存在空格字符
二叉堆属性
最(大)小二叉堆,最(大)小值先出的完全二叉树
logn复杂度,堆顶为最(大)小数,字数也满足同样的性质
STL优先级队列(二叉堆)
二叉堆,最小(大)值先出的完全二叉树
215 Kth Larget Element in an Array(Easy)
已知一个未排序的数组,求这个数组中第K大的数字
最大堆暴力解法:
最小堆解法
295 Find Median From Data Stream(Hard)
Median is the middle value in an ordered integer list. if the size of the list is even , there is no middle value. So the median is the mean of the tweo middle value.
Design a data structure that supports the following two operations:
- void addNum(int num) -> Add a integer number from the data stream to the data structure
- double findMedian() -> Return the median of all elements so far.
直观法