739. 每日温度(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)
思路:新学习的单调栈做法,实质就是用一个栈存储中间结果。在针对数组某个元素的结果没找出来之前,将数组该元素的信息存入栈中,找到结果后,再从栈中删除该元素的信息。
vector<int> dailyTemperatures(vector<int>& temperatures) {int size = temperatures.size();vector<int> result(size, 0);stack<int> st;st.push(0);for(int i=1; i<size; i++){if(temperatures[i]<=temperatures[st.top()]){st.push(i);}else{while(!st.empty() && temperatures[i]>temperatures[st.top()]){result[st.top()] = i-st.top();st.pop();}st.push(i);}}return result;
}
496. 下一个更大元素 I(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)
思路:和上题非常相似,只需在针对数组元素找到结果删除栈中该元素之际,判断该元素是否在另一数组中出现。因此本题需要用到unordered_map。
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {int size1 = nums1.size();int size2 = nums2.size();vector<int> result(size1, -1);unordered_map<int, int> umap;for(int i=0; i<size1; i++) umap[nums1[i]] = i;stack<int> st;st.push(0);for(int i=1; i<size2; i++){if(nums2[i]<=nums2[st.top()]){st.push(i);}else{while(!st.empty() && nums2[i]>nums2[st.top()]){if(umap.count(nums2[st.top()])>0){result[umap[nums2[st.top()]]] = nums2[i];}st.pop();}st.push(i);}}return result;
}