给你一个下标从 0 开始的非负整数数组 nums
。对于 nums
中每一个整数,你必须找到对应元素的 第二大 整数。
如果 nums[j]
满足以下条件,那么我们称它为 nums[i]
的 第二大 整数:
j > i
nums[j] > nums[i]
- 恰好存在 一个
k
满足i < k < j
且nums[k] > nums[i]
。
如果不存在 nums[j]
,那么第二大整数为 -1
。
- 比方说,数组
[1, 2, 4, 3]
中,1
的第二大整数是4
,2
的第二大整数是3
,3
和4
的第二大整数是-1
。
请你返回一个整数数组 answer
,其中 answer[i]
是 nums[i]
的第二大整数。
思路一:单调栈
c++解法
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];
while (!t.empty() && nums[t.back()] < x) {
ans[t.back()] = x;
t.pop_back();
}
int j = s.size();
while (j && nums[s[j - 1]] < x) {
j--;
}
t.insert(t.end(), s.begin() + j, s.end());
s.resize(j);
s.push_back(i);
}
return ans;
}
};