机考刷题之 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;
    }
};

结果

相关推荐
x_yeyue1 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路2 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑3 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光3 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩4 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_629494734 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ5 小时前
单词拆分----dp
算法
智者知已应修善业6 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业6 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机