个体户能做网站备案吗,高端企业网站建站程序,中国网络,品牌建设的作用一、739. 每日温度
力扣题目链接
1. 什么时候用单调栈? 通常是一维数组#xff0c;要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置#xff0c;此时就要想到可以用单调栈。
单调栈的本质是空间换时间,更直白来说#xff0c;就是用一个栈来… 一、739. 每日温度
力扣题目链接
1. 什么时候用单调栈? 通常是一维数组要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置此时就要想到可以用单调栈。
单调栈的本质是空间换时间,更直白来说就是用一个栈来记录我们遍历过的元素
2. 单调栈里存放的元素是什么 单调栈里只需要存放元素的下标i就可以了如果需要使用对应的元素直接T[i]就可以获取。
3. 单调栈里元素是递增呢 还是递减呢?
顺序是指栈顶到栈底的顺序。
求一个元素右边第一个更大元素单调栈就是递增 求一个元素右边第一个更小元素单调栈就是递减 4. 使用单调栈主要有三个判断条件。
当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况
// 版本一
class Solution {
public:vectorint dailyTemperatures(vectorint T) {// 递增栈stackint st;vectorint result(T.size(), 0);st.push(0);for (int i 1; i T.size(); i) {if (T[i] T[st.top()]) { // 情况一st.push(i);} else if (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);}}return result;}
};
二、496.下一个更大元素 I
力扣题目链接
class Solution {
public:vectorint nextGreaterElement(vectorint nums1, vectorint nums2) {stackint st;vectorint result(nums1.size(), -1);if (nums1.size() 0) return result;unordered_mapint, int umap; // key:下标元素value下标for (int i 0; i nums1.size(); i) {umap[nums1[i]] i;}st.push(0);for (int i 1; i nums2.size(); i) {if (nums2[i] nums2[st.top()]) { // 情况一st.push(i);} else 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) { // 看map里是否存在这个元素int index umap[nums2[st.top()]]; // 根据map找到nums2[st.top()] 在 nums1中的下标result[index] nums2[i];}st.pop();}st.push(i);}}return result;}
};