栈和队列
此专栏为本人在学习算法中所记录下的笔记内容
白布鸽
比较有个性的签名
展开
-
LeetCode347.前K个高频元素
PriorityQueue()这个类是优先级队列也就是堆的实现类,基本方法和队列很像,poll(),peek(),offer(),isEmpty(),size()等。你被骗了,我没做出来,能想到的方法时间复杂度是nlogn,还不如不写,想到小顶堆了,但是Java这里我不知道怎么实现:(你可以按 任意顺序 返回答案。经典使用堆实现,但是个人的Java基础不太好,不会实现堆,是能去找博文看看了,顺便看了下大佬的实现,我是废物。至于小顶堆查找一个集合中的top k元素,就不多赘述了,大家都会。原创 2023-11-02 19:44:00 · 65 阅读 · 1 评论 -
LeetCode239.滑动窗口最大值
整体运行:滑动窗口移动的时候,窗口不再包含的那个元素从队列中出队(如果这个元素在队首的话,毕竟单调队列维护队首的元素就代表当前滑动窗口的最大值,如果滑动窗口要掠过它,它理应被遗弃;看了大佬的方法,用的是单调队列(说实话,第一次听过),思路就是当前的单调队列中的元素从队头到队尾是单调不递增的(后面搜了资料发现单调队列分成单调递增和单调递减两种),所以队头的元素代表的当前滑动窗口中的最大值。上面的代码就是学到的,这个题没做出来,我写的方法时复已经到了O(n*k)了,虽然不是暴力算法,时复到了它就是暴力了。原创 2023-11-01 08:20:02 · 21 阅读 · 0 评论 -
LeetCode150.逆波兰表达式求值
其实没什么思想,数据结构里面的例题,遇到数字就入栈,遇到运算符就将栈中的两个数字出栈并进行相应的运算,运算的结果重新返回栈中,但是在运算-和/运算的时候,要注意栈的特性,第一个出栈的数字是运算的后位数。给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。返回一个表示表达式值的整数。原创 2023-10-31 19:43:09 · 39 阅读 · 1 评论 -
LeetCode1047.删除字符串中的所有相邻重复项
和删除想匹配的括号那题一样的思路,读取到当前字符时,“迫切”需要另一个相同的字符来消融,如果下一个字符相等,则消融;否则,当前栈顶元素的“迫切感”降一级,将下一个字符入栈,周而复始。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。原创 2023-10-31 19:42:08 · 43 阅读 · 1 评论 -
LeetCode1047.删除字符串中的所有相邻重复项
和删除想匹配的括号那题一样的思路,读取到当前字符时,“迫切”需要另一个相同的字符来消融,如果下一个字符相等,则消融;否则,当前栈顶元素的“迫切感”降一级,将下一个字符入栈,周而复始。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。原创 2023-10-31 19:01:55 · 32 阅读 · 1 评论 -
LeetCode20.有效的括号
用栈的思想来解决此问题,当遇到第一个左括号的时候,左括号入栈并且“迫切”一个右括号来消融它,如果下一个正好是相应的右括号,那么左括号出栈;若下一个元素是另一个左括号,那么前一个左括号“迫切”找到另一个右括号消融就需要降优先级,当前左括号入栈;如果右括号多了一个,会出现消融左括号的时候,发现栈中并没有相应的左括号并且栈为空,此时返回false;给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。原创 2023-10-31 08:13:13 · 32 阅读 · 1 评论 -
LeetCode225.用队列实现栈
实现的思想就是主队列来模拟栈(倒着的),当offer元素时,先将主队列的元素出队依次添加到辅助队列的末尾,保持次序不变,然后将新添加的元素添加到主队列的尾部(此时队列为空,也是头部),然后再将辅助队列依次出队并加入主队列的后面。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现的思想和上一篇实现栈的思想类似。boolean empty() 如果栈是空的,返回 true;int pop() 移除并返回栈顶元素。原创 2023-10-30 21:56:51 · 23 阅读 · 0 评论 -
LeetCode232.用栈实现队列
实现方法比较简单,push操作全部放入inStack,如果是pop的话,先判断outStack是否为空,如果为空则将InStack内的元素倒灌入outStack中,然后pop出outStack栈顶元素;如果outStack不为空,就不能再倒灌inStack进outStack中了,会破坏outStack的结构,先优先pop出outStack中的内容。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。原创 2023-10-30 19:29:05 · 21 阅读 · 0 评论