408算法题leetcode--第26天

496. 下一个更大元素 I

题目地址496. 下一个更大元素 I - 力扣(LeetCode)

题解思路:单调栈,如注释

时间复杂度:O(n + m)

空间复杂度:O(n)

代码:

cpp 复制代码
class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        // 单调栈:递增栈;存数字
        // 用哈希表存结果数组,用于num1输出
        stack<int>stk;
        unordered_map<int, int>mp;
        stk.push(nums2[0]);
        int size = nums2.size();
        for(int i = 0; i < size; i++){
            while(!stk.empty() && nums2[i] > stk.top()){
                mp[stk.top()] = nums2[i]; 
                stk.pop();
            }
            stk.push(nums2[i]);
        }
        // 输出
        vector<int>ret;
        size = nums1.size();
        for(int i = 0; i < size; i++){
            if(!mp.count(nums1[i])){
                ret.emplace_back(-1);
            } else {
                ret.emplace_back(mp[nums1[i]]);
            }
        }
        return ret;
    }
};

503. 下一个更大元素 II

题目地址503. 下一个更大元素 II - 力扣(LeetCode)

题解思路:注释

时间复杂度:O(n)

空间复杂度:O(n)

代码:

cpp 复制代码
class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        // 单调栈:先复制前面n-1个数到原数组的后面(用下标模拟即可),再用单调栈
        // 记录下标,递增栈
        int size = nums.size();
        vector<int>ret(size, -1);
        stack<int>stk;
        for(int i = 0; i < size * 2 - 1; i++){
            while(!stk.empty() && nums[stk.top()] < nums[i % size]){
                ret[stk.top()] = nums[i % size];
                stk.pop();
            }
            stk.push(i % size);
        }
        return ret;
    }
};
相关推荐
橘白31614 小时前
rl笔记(一):策略梯度更新算法推导
人工智能·算法·机器人·强化学习
hhhhhaaa14 小时前
多节点矩阵式任务系统:统一配置中心与动态规则引擎架构设计
后端·算法·架构
吃着火锅x唱着歌15 小时前
LeetCode 739.每日温度
算法·leetcode·职场和发展
如竟没有火炬15 小时前
去除重复字母——贪心+单调栈
开发语言·数据结构·python·算法·leetcode·深度优先
薛定e的猫咪15 小时前
【ICML 2025】MODULI:基于扩散模型解锁离线多目标强化学习的偏好泛化
人工智能·学习·算法·机器学习
Brilliantwxx15 小时前
【C++】priority_queue以及 仿函数 的学习
开发语言·c++·笔记·学习·算法
风味蘑菇干15 小时前
斗地主案例
java·数据结构·算法
洛水水15 小时前
【力扣100题】39.二叉树的最近公共祖先
算法·leetcode·职场和发展
无敌昊哥战神15 小时前
【LeetCode 134】加油站:图解指针跳跃与 O(N) 极简贪心,避开 Python 隐藏坑!
c语言·python·算法·leetcode
人道领域15 小时前
【LeetCode刷题日记】222.极速计算完全二叉树节点数:O(log²n)算法揭秘
java·数据结构·算法·leetcode·深度优先