栈、队列、堆
唯有一颗慎独心
渴望力量使我成为琦玉
展开
-
数据流的中位数
题目:中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。解析:思路:巧用堆的性质添加元素时的堆调整:获取中位数 :代码:class MedianFinder {原创 2021-02-26 20:44:40 · 134 阅读 · 1 评论 -
数组中第k个最大元素
题目:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。解析:一、排序先对数组排序(升序排序),第 K 大元素是倒数第 K 个元素,即 nums[len-k],这种方法最简单暴力时间复杂度:因为使用的JDK的Arrays.sort,默认是快排方式,时间复杂度O(NlogN)空间复杂度:使用的原地排序,空间复杂度O(1)代码:class Solution1 { public int findKthLarges原创 2021-02-26 17:18:52 · 934 阅读 · 0 评论 -
合法的出栈序列
题目:已知从1至n的数字序列,按顺序入栈,每个数字入栈后即可出栈,也可在栈中停留,等待后面的数字入栈出栈后,该数字再出栈,求该数字序列的出栈序列是否合法?如图显示:解析:思路:使用栈与队列模拟入栈、出栈过程。C语言版代码:...原创 2021-02-26 15:57:33 · 320 阅读 · 0 评论 -
最小栈
题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。解析:核心在于用另一个栈,存储每个状态的最小值。class MinStack { Stack<Integer> stack1; Stack<Integer> stack2; /** initi原创 2021-02-26 11:41:24 · 75 阅读 · 0 评论 -
用栈来实现队列
题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false解析:主要还是push的方法如何实现:一个队列是 FIFO 的,但一个栈是 LIFO 的。这就意味着最新压入的元素必原创 2021-02-26 10:31:59 · 207 阅读 · 0 评论 -
用队列实现栈
题目: 用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。解析:(两个队列)为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应满足队列前端的元素是原创 2021-02-25 22:36:07 · 490 阅读 · 1 评论