题目描述:
思路一:
参照下一个更大元素Ⅰ,一次遍历之后再比较查看栈内剩余数字
PS:代码写的实在是丑陋,后面再美化一下
代码:
class Solution {
private:
vector<int> res;
stack<int> temp;
stack<int> tip;
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int len=nums.size();
if(len==0){
return res;
}
for(int i=0;i<len;++i){
res.push_back(-1);
}
for(int i=0;i<len-1;++i){
temp.push(nums[i]);
tip.push(i);
while(temp.size()>0&&nums[i+1]>temp.top()){
res[tip.top()]=nums[i+1];
temp.pop();
tip.pop();
}
}
temp.push(nums[len-1]);
tip.push(len-1);
for(int i=0;i<len-1;++i){
while(temp.size()>0&&nums[i]>temp.top()){
res[tip.top()]=nums[i];
temp.pop();
tip.pop();
}
}
return res;
}
};
执行结果:
思路二:
循环至多遍历两遍,把原数组double一下,太暴力了,double之后参照496题,代码不贴了。
也可以进阶一下,假装数组double了,看了leetcode的题解,这个为啥要逆序等我看懂了再来贴代码。https://leetcode-cn.com/problems/next-greater-element-ii/solution/dan-diao-zhan-jie-jue-next-greater-number-yi-lei-2/