机考刷题之 9 LeetCode 503 下一个更大元素 II

题目

分析

个人认为比较巧妙的是将原数组复制两遍来模拟循环,就不用其他复杂的结构了。不过入栈时只需要前n个即可,后面n个是来给前n找是否有更大的,它们自身不需要再找更大。

代码

cpp 复制代码
class Solution {
    struct num {
        int val;
        int pos;
    };
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) return {};

        // 构造双倍长度数组
        vector<int> myNums = nums;
        myNums.insert(myNums.end(), nums.begin(), nums.end());

        vector<int> res(n, -1);
        stack<num> myStack;

        for (int i = 0; i < 2 * n; i++) {
            int realPos = i % n;
            while (!myStack.empty() && myNums[i] > myStack.top().val) {
                res[myStack.top().pos] = myNums[i];
                myStack.pop();
            }
            // 只需要把前 n 个位置入栈(避免重复入栈)
            if (i < n) {
                myStack.push({myNums[i], realPos});
            }
        }
        return res;
    }
};

结果

相关推荐
lzhdim11 分钟前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
weixin_3077791317 分钟前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
smj2302_7968265219 分钟前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
AIGC小尼23 分钟前
ACE-Step-1.5 本地 AI 音乐模型实战|text2music 歌词转人声,部署脚本、参数调优与排坑全记录
人工智能·算法·comfyui·ai漫剧
YOLO数据集集合30 分钟前
树木检测数据集 | 树木检测 树种分类 航拍林业 森林监测9131期
人工智能·算法·机器学习·分类·数据挖掘·林业·树种分类
青山木35 分钟前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
垆边人似月.38 分钟前
字符串重排后最大字典序
算法·leetcode·职场和发展
码流子39 分钟前
AI稽核精灵-Agent落地
大数据·人工智能·物联网·算法·系统架构
微三云生态系统架构师-彭丹1 小时前
排队免单资金池专户存管与返本算法:队列模型与熔断保护
算法·熔断机制·排队免单·消费增值·资金池·队列系统·返本算法
wzdark1 小时前
矩阵快速幂算法在图路径计算中的应用4
线性代数·算法·矩阵