![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
栈与队列
栈与队列
kkkkuuga
这个作者很懒,什么都没留下…
展开
-
leetcode347. 前 K 个高频元素
1.题目描述:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。2.使用hashmap统计频次,再对value值进行排序(treeset只能对key排序),采用逆序取前k个值(需要完全遍历entryset排序),相当于大顶堆,时间复杂度O(nlogn)。class Solution { public int[] topKFrequent(int[] nums, int k) { Map<Integer, Inte原创 2022-05-21 14:59:08 · 232 阅读 · 0 评论 -
leetcode239. 滑动窗口最大值
1.题目描述:给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。2.暴力解法:超时。。class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int[] arr = new int[nums.length - k + 1]; for (int i =原创 2022-05-17 22:14:11 · 367 阅读 · 0 评论 -
leetcode150. 逆波兰表达式求值
1.题目描述:根据逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为0的情况。2.使用栈:遇到数字则入栈,遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中(leetcode内置的jdk版本判断字符串只能用equals)。class Solution { public int evalRPN.原创 2022-05-17 20:14:31 · 75 阅读 · 0 评论 -
leetcode1047. 删除字符串中的所有相邻重复项
1.题目描述:给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。2.使用栈:刚开始写的时候用了两个栈,用来入栈与出栈。。。class Solution { public String removeDuplicates(String s) { //借助两个栈 char[] arr = s.toCharArray()原创 2022-05-15 15:14:08 · 201 阅读 · 0 评论 -
leetcode20. 有效的括号
1.题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合;左括号必须以正确的顺序闭合。2.使用栈:方法就是依次将左括号符号对应的右括号符号压入栈匹配则弹出,这题使用队列queue也可以,因为队列头元素与栈顶元素不一致。不匹配的情况一共有三种:①左括号有多②右括号有多③右括号不匹配。class Solution { public boolean isValid(String s原创 2022-05-15 11:52:19 · 215 阅读 · 0 评论 -
leetcode225. 用队列实现栈
1.题目描述:2.解法:与leetcode232. 用栈实现队列不同,无法用两个队列模仿出栈入栈,queue2用来存放从queue1弹出的元素,等queue1队列最末元素弹出后再将queue2存储的元素重新放回queue1。class MyStack { Queue<Integer> queue1 = new LinkedList<>(); Queue<Integer> queue2 = new LinkedList<>();原创 2022-05-14 17:23:36 · 111 阅读 · 0 评论 -
leetcode232. 用栈实现队列
1.题目描述:2.解法:(关键在于使用两个栈进行模拟)class MyQueue { Stack<Integer> stackIn = new Stack<>();//入栈操作 Stack<Integer> stackOut = new Stack<>();//出栈操作 public MyQueue() { } public void push(int x) { stackIn.原创 2022-05-14 13:55:25 · 168 阅读 · 1 评论 -
leetcode84. 柱状图中最大的矩形
1.题目描述:给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。2.双指针:做法与leetcode42. 接雨水类似,但是是找到当前柱左右比它小的第一个柱,求差值计算面积,超时了。class Solution { public int largestRectangleArea(int[] heights) { int res = 0; for (int i = 0; i原创 2022-04-13 11:58:24 · 346 阅读 · 0 评论 -
leetcode42. 接雨水
1.题目描述:给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。2.双指针:每列雨水的高度,取决于该列左侧最高柱和右侧最高柱子中最小值。首尾不计入。class Solution { public int trap(int[] height) { int res = 0; for (int i = 1; i < height.length - 1; i++) { int lef.原创 2022-04-13 09:27:13 · 398 阅读 · 0 评论 -
leetcode503. 下一个更大元素 II
1.题目描述:给定一个循环数组nums(nums[nums.length - 1]的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。2.单调栈:循环数组,取余数。class Solution { public int[] nextGreaterElements(int[] nums) { int[] .原创 2022-04-11 22:31:54 · 146 阅读 · 0 评论 -
leetcode496. 下一个更大元素 I
1.题目描述:nums1中数字x的下一个更大元素是指x在nums2中对应位置右侧的第一个比x大的元素。给你两个 没有重复元素的数组nums1和nums2,下标从0开始计数,其中nums1是nums2的子集。对于每个 0 <= i < nums1.length,找出满足nums1[i] == nums2[j]的下标j,并且在nums2确定nums2[j]的下一个更大元素。如果不存在下一个更大元素,那么本次查询的答案是-1。返回一个长为nums1.length 的数组ans作为答案,满足ans[原创 2022-04-11 21:20:52 · 187 阅读 · 0 评论 -
leetcode739. 每日温度
1.题目描述:给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指在第i天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用0来代替。2.暴力解法:双层for循环。class Solution { public int[] dailyTemperatures(int[] temperatures) { int[] arr = new int[temperatures.length]; .原创 2022-04-10 21:40:48 · 939 阅读 · 0 评论