LeetCode 每日一题(Hard) Day 11||单调栈

2454. 下一个更大元素 IV

(这个题看了很长时间,最后还是看了题解才做出来,第一次做单调栈的题目,以后抽空多练练orz)

给你一个下标从 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] 的第二大整数。

示例 1:

输入:nums = [2,4,0,9,6]
输出:[9,6,6,-1,-1]
解释:
下标为 0 处:2 的右边,4 是大于 2 的第一个整数,9 是第二个大于 2 的整数。
下标为 1 处:4 的右边,9 是大于 4 的第一个整数,6 是第二个大于 4 的整数。
下标为 2 处:0 的右边,9 是大于 0 的第一个整数,6 是第二个大于 0 的整数。
下标为 3 处:右边不存在大于 9 的整数,所以第二大整数为 -1 。
下标为 4 处:右边不存在大于 6 的整数,所以第二大整数为 -1 。
所以我们返回 [9,6,6,-1,-1] 。
示例 2:

输入:nums = [3,3]
输出:[-1,-1]
解释:
由于每个数右边都没有更大的数,所以我们返回 [-1,-1] 。

提示:

1 <= nums.length <= 105
0 <= nums[i] <= 109
使用双单调栈实现,具体思路读者可以参考灵神的题解O(n) 一次遍历+双单调栈(附题单)

class Solution {
   
public:
    vector<int> secondGreaterElement(vector<int>& nums) {
   
        int n=nums.size(),l;
        vector<int>res(n,-1),mid,sml;
        for(int i=0;i<n;i++){
   
            while (!sml.empty()&&nums[sml.back()]<nums[i])
            {
   
                res[sml.back()]=nums[i];
                sml.pop_back();
            }
            l=mid.size();
            while(l>0&&nums[mid[l-1]]<nums[i]) l--;
            sml.insert(sml.end(),mid.begin()+l,mid.end());
            mid.resize(l);
            mid.push_back(i);
        }
        return res;
    }
};

相关推荐

  1. LeetCode 每日(Hard) Day 11||单调

    2023-12-16 12:32:04       55 阅读
  2. LeetCode 每日 Day 19 || 前后缀和分解&单调

    2023-12-16 12:32:04       70 阅读
  3. LeetCode每日单调 901股票价格跨度

    2023-12-16 12:32:04       61 阅读
  4. LeetCode每日单调316去除重复字母

    2023-12-16 12:32:04       54 阅读
  5. LeetCode每日单调 402 移掉k位数字

    2023-12-16 12:32:04       53 阅读
  6. LeetCode 每日 2023/12/11-2023/12/17

    2023-12-16 12:32:04       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-16 12:32:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-16 12:32:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-16 12:32:04       82 阅读
  4. Python语言-面向对象

    2023-12-16 12:32:04       91 阅读

热门阅读

  1. 使用Python编写简单的文本编辑器

    2023-12-16 12:32:04       58 阅读
  2. PostgreSql 设置自增字段

    2023-12-16 12:32:04       72 阅读
  3. Python中的列表与数组

    2023-12-16 12:32:04       65 阅读
  4. 使用Python将HTML快速转换成PDF

    2023-12-16 12:32:04       63 阅读
  5. 三种决策树算法

    2023-12-16 12:32:04       48 阅读
  6. 前端面试题:什么是对称加密和非对称加密?

    2023-12-16 12:32:04       60 阅读
  7. 低频量化日报

    2023-12-16 12:32:04       49 阅读
  8. P6492 [COCI2010-2011#6] STEP 题解

    2023-12-16 12:32:04       42 阅读
  9. docker 清除不用的容器数据

    2023-12-16 12:32:04       51 阅读