前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 503. 下一个更大元素 II(单调栈)

LeetCode 503. 下一个更大元素 II(单调栈)

作者头像
Michael阿明
发布于 2020-07-13 07:18:33
发布于 2020-07-13 07:18:33
53100
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:

输入: [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数; 
第二个 1 的下一个最大的数需要循环搜索,结果也是 2

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/next-greater-element-ii

2. 解题

2.1 朴素解法

  • 模拟题意查找
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size(), i, j, count = 0;
        bool found;
        vector<int> ans;
        for(int i = 0; i < n; i++)
        {
        	count = n-1;
        	found = false;
        	j = i+1;
        	if(j == n)
        		j = 0;
        	while(count--)
        	{
        		if(nums[j] > nums[i])
        		{
        			ans.push_back(nums[j]);
        			found = true;
        			break;
        		}
        		if(++j == n)
        			j = 0;
        	}
        	if(!found)
        		ans.push_back(-1);
        }
        return ans;
    }
};

2.2 单调栈解题

别人的笔记介绍单调栈

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size(), i;
        vector<int> ans(n,-1);
        stack<int> stk;
        for(int i = 0; i < 2*n; i++)
        {
        	while(!stk.empty() && nums[i%n]> nums[stk.top()])
        	{
        		ans[stk.top()] = nums[i%n];
        		stk.pop();
        	}
        	if(i < n)
        		stk.push(i);
        }
        return ans;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【leetcode刷题】T26-下一个更大元素 II
Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, output -1 for this number.
木又AI帮
2019/07/17
4550
LeetCode 1019. 链表中的下一个更大节点(单调栈)
给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, … 。
Michael阿明
2020/07/13
7080
LeetCode 1019. 链表中的下一个更大节点(单调栈)
​LeetCode刷题实战503:下一个更大元素 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
1880
LeetCode *503. 下一个更大元素 II(单调栈)
单调栈: 暴力法如果遇到一串单调递减的字符串会所有元素都计算一遍浪费时间,将这些元素放入一个栈中,如果遇到了比栈顶元素大的元素k,那么栈顶元素的下一个更大元素就是k,然后把栈顶pop出去,然后k逐一与栈顶比较直到遇到比k大的将k加入栈中。
SakuraTears
2022/01/13
1950
LeetCode *503. 下一个更大元素 II(单调栈)
LeetCode 739. 每日温度(单调栈)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
Michael阿明
2020/07/13
3120
LeetCode 739. 每日温度(单调栈)
继续寻找下一个更大元素
链接:https://leetcode-cn.com/problems/next-greater-element-ii/
代码随想录
2021/07/16
5310
每日算法系列【LeetCode 503】下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
godweiyang
2020/03/24
7290
LeetCode 42. 接雨水(双指针、单调栈)
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
Michael阿明
2020/07/13
1.1K0
LeetCode 42. 接雨水(双指针、单调栈)
503. 下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。 示例 1: 输入: [1,2,1] 输出: [2,-1,2] 解释: 第一个 1 的下一个更大的数是 2; 数字 2 找不到下一个更大的数; 第二个 1 的下一个最大的数需要循环搜索,结果也是 2。 class Solution { pu
编程张无忌
2021/06/17
2730
使用单调栈解决 “下一个更大元素” 问题
今天分享到一种栈的衍生数据结构 —— 单调栈(Monotonic Stack)。栈(Stack)是一种满足后进先出(LIFO)逻辑的数据结构,而单调栈实际上就是在栈的基础上增加单调的性质(单调递增或单调递减)。那么,单调栈是用来解决什么问题的呢?
用户9995743
2022/12/22
4760
使用单调栈解决 “下一个更大元素” 问题
leetcode刷题(103)——503. 下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
老马的编程之旅
2022/06/22
1950
leetcode刷题(103)——503. 下一个更大元素 II
LeetCode 581. 最短无序连续子数组(排序&单调栈)
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
Michael阿明
2020/07/13
6060
LeetCode 581. 最短无序连续子数组(排序&单调栈)
LeetCode 321. 拼接最大数(单调栈)*
给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。 现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。
Michael阿明
2021/02/19
2970
LeetCode 496. 下一个更大元素 I(哈希)
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
Michael阿明
2020/07/13
3060
LeetCode 496. 下一个更大元素 I(哈希)
​LeetCode刷题实战496:下一个更大元素 I
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/03/03
2820
​LeetCode刷题实战496:下一个更大元素 I
子数组,你让我拿什么爱你?
周赛的时候被第二题卡了一下,自己之前做过子数组的问题,可以用单调栈优化,比赛的时候也往这方面想了
ACM算法日常
2021/12/20
3260
LeetCode 22. 括号生成(回溯/DP)
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
Michael阿明
2020/07/13
5200
LeetCode 22. 括号生成(回溯/DP)
算法学习笔记-栈(stack)
这题跟上面的题目是一模一样的,最少添加就是有多少括号没有对象,,没有对象的括号都会留在栈中,有的都会出栈,所以就是求栈的大小;
买唯送忧
2021/05/23
4270
LeetCode 590. N叉树的后序遍历(后序遍历)
1. 题目 2. 解题 2.1 递归 class Solution { public: vector<int> postorder(Node* root) { vector<i
Michael阿明
2021/02/20
2490
LeetCode 590. N叉树的后序遍历(后序遍历)
六十五、下一个更大的数系列,单调栈解决方法
单调栈的实质是有单调性的栈,包括单调递增栈和单调递减栈。通过栈的入栈和出栈维护一个动态的滑动窗口,然后栈顶元素是该窗口的最大值或最小值,通过一次遍历,就可以计算出所有元素的下一个较大值或较小值。
润森
2022/08/17
4090
六十五、下一个更大的数系列,单调栈解决方法
相关推荐
【leetcode刷题】T26-下一个更大元素 II
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档