单调栈问题---(每日温度,下一个更大元素Ⅰ)
创始人
2024-01-28 10:49:02

代码随想录day 58 单调栈问题— 每日温度,下一个更大元素Ⅰ

文章目录

    • 1.leetcode 739. 每日温度
        • 1.1 详细思路及解题步骤
        • 1.2Java版代码示例
    • 2.leetcode 496. 下一个更大元素 I
        • 2.1 详细思路及解题步骤
        • 2.2Java版代码示例

1.leetcode 739. 每日温度

在这里插入图片描述

1.1 详细思路及解题步骤

  这题会用到单调栈的方法来做,为什么用单调栈呢,什么时候又能想到用单调栈呢?
  当题目出现一维数组且需要求当前位置往前或者往后的第一个比它大or小的值,这时候就会用单调栈的方法去做。
  需要考虑的问题有

  1. 单调栈中存放的是索引
  2. 单调栈中存放的顺序,是递增还是递减呢。

使用单调栈主要有三个判断条件。

当前遍历的元素T[i]小于栈顶元素T[st.peek()]的情况 //栈.peek()在Java中表示栈顶元素
当前遍历的元素T[i]等于栈顶元素T[st.peek()]的情况
当前遍历的元素T[i]大于栈顶元素T[st.peek()]的情况

以第一个例子 temp = [73,74,75,71,69,72,76,73]

  1. 先将第一个索引也就是0方法栈中
  2. 然后遍历到第二个位置的时候判断temp[1]>temp[stack.peek()]/表示栈顶元素/
    这时就找到了比temp[0]大的值,然后就用res[0]=1-stack.peek().

    …上面是当前遍历的元素T[i]大于栈顶元素T[st.peek()]的情况 如果当前遍历的元素T[i]小于栈顶元素T[st.peek()]的情况 和当前遍历的元素T[i]等于栈顶元素T[st.peek()]的时候,那么就直接将遍历位置的索引存入栈中stack.push(i),就按照这种方法顺着来就欧克了。

1.2Java版代码示例

class Solution {public int[] dailyTemperatures(int[] temperatures) {int len=temperatures.length;int[] result= new int[len];Deque stack=new LinkedList<>();stack.push(0);for(int i=1;iif(temperatures[i]<=temperatures[stack.peek()]){stack.push(i);}else{while(!stack.isEmpty()&&temperatures[stack.peek()]result[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);//别漏了,弹出来之后最终要加进去}} return result;}
}

2.leetcode 496. 下一个更大元素 I

在这里插入图片描述


2.1 详细思路及解题步骤

  这题与上题做法差不多,但是会比较难想,可以先将nums1的内容存放在一个Map上面,数组的值和索引一一对应,然后就开始对nums2进行放入栈的操作,
①当前遍历的元素nums2[i]小于栈顶元素nums2[st.peek()]和 当前遍历的元素nums2[i]等于栈顶元素nums2[st.peek()]的情况 就不用考虑nums1中的东西.
②当前遍历的元素nums2[i]大于栈顶元素T[st.peek()]的情况时候,就需要考虑栈顶的元素是否在Map中存在,如果存在就需要记录当前遍历的nums[2],此时这个值就是要求的更大的下个元素。

2.2Java版代码示例

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Deque stack=new LinkedList<>();int[] result=new int[nums1.length];Arrays.fill(result,-1);Map map=new HashMap<>();stack.push(0);for(int i=0;imap.put(nums1[i],i);}for(int i=1;iif(nums2[stack.peek()]>=nums2[i]){stack.push(i);}else{while(!stack.isEmpty()&&nums2[stack.peek()]if(map.containsKey(nums2[stack.peek()])){Integer in=map.get(nums2[stack.peek()]);result[in]=nums2[i];}stack.pop();//别漏勒}stack.push(i);}}return result;}
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
不用电脑怎么设置苹果铃声 ip... 需要一个app,加上苹果自带的app即可1、手机下载爱思极速版。因为之前换手机搬移数据时店员帮忙整理...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
才高八斗的主人公 三顾茅庐的主... 古代君王在建立自己的政治体系之时,大多会采取一些礼贤下士的手段,对于一些有卓越才能的人放低姿态。因为...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...