力扣2454. 下一个更大元素 IV
题目
题目解析及思路
题目要求对于每个数,找到右边比它大的第二个数,并记录在ans数组中
如果是右边第一个大的,就用一个递减栈即可,栈顶元素如果<当前元素则弹出
第二个大数就要利用弹出的栈顶元素,再开一个栈将弹出的元素存下来
当进来一个新数时跟t栈栈顶元素比较,如果x > t.top() 则t.top()对应的元素的answer值为x
参考题解
代码
class Solution {
public:
vector<int> secondGreaterElement(vector<int>& nums) {
int n = nums.size();
vector<int> ans(n,-1),s,t;
for(int i=0;i<n;i++){
int x = nums[i];
//新数先与t栈栈顶元素比较
while(!t.empty() && nums[t.back()] < x){
ans[t.back()] = x;
t.pop_back();
}
int j = s.size();
//不满足条件的弹出s栈
while(j && nums[s[j-1]] < x){ `
j --;
}
//因为s栈和t栈都是递减栈,所以直接整个移过去就行
t.insert(t.end(),s.begin()+j,s.end());
s.resize(j);
s.push_back(i);
}
return ans;
}
};