leetcode做题笔记2454. 下一个更大元素 IV

2023-12-13 04:29:43

给你一个下标从?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;
    }
};

文章来源:https://blog.csdn.net/si_mple_/article/details/134959670
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。