主页 > 开源代码  > 

代码随想录算法【Day47】

代码随想录算法【Day47】

单调栈

单调栈:保持栈里面的元素是递增的或者递减的

问题场景:求当前元素左边或者右边第一个比当前元素大或者小的元素

单调栈的作用:存放遍历过的元素的下标

遍历过程:

求当前元素右边第一个比当前元素大的元素,单调栈内的元素(从栈顶到栈底)为单调递增。

使用result[i]来记录结果,表示下标为i的元素与右边第一个比它大的元素的距离。

若当前遍历的元素没有栈顶元素大,则入栈;若当前遍历的元素比栈顶元素大,则栈顶元素弹出,同时更新刚刚被弹出的栈顶元素的result[i]值

739.每日温度

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

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

情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况:当前元素与栈顶元素进行比对,若大于栈顶元素,则更新result数组

class Solution { public:   vector<int> dailyTemperatures(vector<int>& T) {       stack<int> st;       vector<int> 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{               while(!st.empty() && T[i] > T[st.top()]){                   result[st.top()] = i - st.top();                   st.pop();               }               st.push(i);           }       }       return result;   } };
标签:

代码随想录算法【Day47】由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“代码随想录算法【Day47】