
用时126天,完成500题,平均4题/天,照这个速率,我还需要四个月完成1000题挑战。
单调栈模板

class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector<int> ans(n);
stack<int> st;
for (int i = 2 * n - 1; i >= 0; i--) {
// cout << i << endl;
int tmp = nums[i % n];
while (!st.empty() && nums[st.top() % n] <= tmp) {
st.pop();
}
if (i < n) ans[i] = st.empty() ? -1 : nums[st.top() % n];
st.push(i);
}
return ans;
}
};
st维护了一个单调递减的堆栈,实质是移除不需要/或者是无意义的元素,在这道题的语义就是,如果一个数下标大于该数,且值小于该数,那么这个数必然不可能成为今后的下一个更大值,所以移除。
能够解决的问题:
博主用时126天完成500题,按此速率还需四个月完成1000题挑战。介绍了单调栈模板,st维护单调递减堆栈,移除无意义元素。还列举了该模板能解决的LeetCode问题,如132模式、每日温度等。

被折叠的 条评论
为什么被折叠?



