美文网首页
代码随想录算法训练营第六十天|739. 每日温度、496.下一个

代码随想录算法训练营第六十天|739. 每日温度、496.下一个

作者: eagleX | 来源:发表于2023-10-06 15:07 被阅读0次

739. 每日温度 

首先想到暴力求解

遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次

单调栈里存放元素的下标i

情况一:当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况

情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况

情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况

vector<int>dailyTemperatures(vector<int>&T){// 递增栈stack<int>st;vector<int>result(T.size(),0);st.push(0);for(inti=1;i<T.size();i++){if(T[i]<T[st.top()]){// 情况一st.push(i);}elseif(T[i]==T[st.top()]){// 情况二st.push(i);}else{while(!st.empty()&&T[i]>T[st.top()]){// 情况三result[st.top()]=i-st.top();st.pop();}st.push(i);}}returnresult;}

496.下一个更大元素 I  

定义一个和nums1一样大小的数组result来存放结果,初始化为-1

遍历nums2的过程中,判断nums2[i]是否在nums1中出现过,根据nums1元素的下标来更新result数组

栈头到栈底的顺序,要从小到大,也就是保持栈里的元素为递增顺序

情况一:当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况

此时满足递增栈(栈头到栈底的顺序),所以直接入栈。

情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况

如果相等的话,依然直接入栈,因为我们要求的是右边第一个比自己大的元素,而不是大于等于!

情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况

此时如果入栈就不满足递增栈了,这也是找到右边第一个比自己大的元素的时候。

判断栈顶元素是否在nums1里出现过,(注意栈里的元素是nums2的元素),如果出现过,开始记录结果。

vector<int>nextGreaterElement(vector<int>&nums1,vector<int>&nums2){stack<int>st;vector<int>result(nums1.size(),-1);if(nums1.size()==0)returnresult;unordered_map<int,int>umap;// key:下标元素,value:下标for(inti=0;i<nums1.size();i++){umap[nums1[i]]=i;}st.push(0);for(inti=1;i<nums2.size();i++){while(!st.empty()&&nums2[i]>nums2[st.top()]){if(umap.count(nums2[st.top()])>0){// 看map里是否存在这个元素intindex=umap[nums2[st.top()]];// 根据map找到nums2[st.top()] 在 nums1中的下标result[index]=nums2[i];}st.pop();}st.push(i);}returnresult;}

相关文章

  • 739. 每日温度/46. 全排列

    739. 每日温度 相关标签 : 哈希表 栈 46. 全排列 相关标签: 回溯算法

  • 739. 每日温度

    739. 每日温度[https://leetcode.cn/problems/daily-temperatures...

  • 739. 每日温度

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • 739. 每日温度

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • 题739

    739. 每日温度[https://leetcode-cn.com/problems/daily-temperat...

  • LeetCode 739. 每日温度 | Python

    739. 每日温度 题目来源:力扣(LeetCode)https://leetcode-cn.com/proble...

  • 739. 每日温度

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,...

  • 739. 每日温度

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,...

  • 739. 每日温度

    题目描述 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都...

  • 739. 每日温度

    题目描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。...

网友评论

      本文标题:代码随想录算法训练营第六十天|739. 每日温度、496.下一个

      本文链接:https://www.haomeiwen.com/subject/flopbdtx.html