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

结果

相关推荐
爱编程的小新☆5 分钟前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng10 分钟前
2024牛客暑期多校训练营1
算法
hetao173383710 分钟前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
技术小黑13 分钟前
RNN算法实战系列06 | LSTM 实现糖尿病探索与预测
rnn·算法·lstm
evans在进步15 分钟前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
Lzh编程小栈23 分钟前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
疯狂打码的少年34 分钟前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs6661 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance1 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型
Forever Nore2 小时前
LeetCode 13 罗马数字转整数 - 按规则处理
linux·服务器·leetcode