栈和队列
Lc_summer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DFS和BFS求解岛屿数量
题目描述给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。示例1输入[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]返回值3备注:01矩阵范围<=200*200思路先遍历所有节点找到节点值为1的,然后将当前节点的坐标传递给DFS或者BFSDFS递归三部曲1.输入和返回值:输入原创 2021-03-05 13:40:41 · 489 阅读 · 0 评论 -
利用优先级队列求频率最高的k个元素
leetcode 347. 前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]思路1.先用哈希map统计每个元素出现的次数2.再用优先级队列priority_queue记录频率最大的k个数3.在将队列中的元素输出到结果集vector中//优先级队列默认是最大堆,元素从小到大输出,这里采用自定义的比较函数,原创 2021-02-28 14:04:12 · 320 阅读 · 0 评论 -
利用单调队列求滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7原创 2021-02-28 14:03:48 · 309 阅读 · 0 评论 -
栈的应用之逆波兰表达式求值
leetcode150. 逆波兰表达式求值根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: [“4”, “13”, “5原创 2021-02-28 14:03:20 · 271 阅读 · 0 评论 -
利用栈的思想原地算法解决相邻字符匹配问题
leetcode 1047. 删除字符串中的所有相邻重复项给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 “aaca”,其中又只有 “aa” 可以执行重复项删除操作,所原创 2021-02-28 14:02:03 · 194 阅读 · 0 评论 -
栈的应用之括号匹配
leetcode 20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路将左括号进栈,当遇到右括号时与栈顶元素进行括号匹配,左右括号不匹配或者栈为空时退出,匹配则弹出栈顶元素,最后判断栈是否为空,为空则说明所有的括号都匹配了,反之则存在不匹配的括号 bool isValid(string s) { //当第一个字符为右括号直接原创 2021-02-28 14:01:28 · 257 阅读 · 0 评论 -
利用两个队列实现栈
leetcode225. 用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/po原创 2021-02-28 14:00:39 · 633 阅读 · 0 评论 -
用两个栈实现队列
leetcode 232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false思路采用两个栈,一个栈用来输入,一个栈用来输出,往输入栈中添加元素,取头部和删除头部原创 2021-02-28 13:59:40 · 304 阅读 · 0 评论
分享