首页 > 其他分享 >503. 下一个更大元素 II

503. 下一个更大元素 II

时间:2023-06-12 11:35:18浏览次数:36  
标签:sta idx nums 元素 len II 更大 503

给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

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

 
示例 1:

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

思路:循环数组,只需要模拟遍历两次数组即可

> 单调栈


class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int len = nums.size();
        if(len == 1) return {-1};
        vector<int> answer(len,-1);
        stack<int> sta;
        sta.push(0);
        for(int i = 1;i < len * 2;i++){
            int idx = sta.top();
            while(nums[idx] < nums[i % len]){
                //出栈
                answer[idx] = nums[i % len];
                sta.pop();
                if(!sta.empty()){
                    idx = sta.top();
                }
                else{
                    break;
                }
            }
            //入栈
            sta.push(i % len);
        }
        return answer;
    }
};

标签:sta,idx,nums,元素,len,II,更大,503
From: https://www.cnblogs.com/lihaoxiang/p/17474576.html

相关文章

  • 496. 下一个更大元素 I
    nums1中数字x的下一个更大元素是指x在nums2中对应位置右侧的第一个比x大的元素。给你两个没有重复元素的数组nums1和nums2,下标从0开始计数,其中nums1是nums2的子集。对于每个0<=i<nums1.length,找出满足nums1[i]==nums2[j]的下标j,并且在nu......
  • deal.II — an open source finite element library
    简介:Whatitis: AC++softwarelibrarysupportingthecreationoffiniteelementcodesandanopencommunityofusersanddevelopers.(Learnmore.)Mission: Toprovidewell-documentedtoolstobuildfiniteelementcodesforabroadvarietyofPDEs,froml......
  • 访问利用windows IIS 搭建的webdav出现500、403等代码的解决方案
    服务端在IIS中启用webDav添加创作规则(如第1张图)启用「身份验证」(如第2、3张图)防火墙设置将「在IIS中对该webDav站点设置的端口」设为「例外」或直接关闭防火墙重启该IIS站点(可选)客户端下载地址(选一即可):Windows64位https://www.123pan.com/s/FfztVv-DxNn3.html......
  • [GPT] jquery chosen插件选择的多个元素是逗号分隔的,怎么设置成其它分隔符号 ?
     如果你想要在jQueryChosen插件中使用其它分隔符号,可以通过以下方式实现: 1.设置delimiter选项为一个包含所需分隔符的字符串。$(".chosen-select").chosen({delimiter:";"});在这个例子中,我们将分隔符设置为分号;。 2.在表单提交时,使用JavaScript替换......
  • 根据已有链表中的元素进行排序
    思想为先将链表中的每一个节点映射到一个链表节点为变量的数组里,在根据节点的元素进行排序,本程序为ave,过程中将数组变量排序,最后重新生成链voidpaixu(LinkListhead)//从大到小{intlength=len(head),i=0,j=0,sum1[length],n1;LinkListsum[length];LinkListpa=hea......
  • 第四天打卡|24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 面试题 02.07.
    24.两两交换链表中的节点:简单的交换 19.删除链表的倒数第N个节点: ●  面试题 02.07. 链表相交:这题没看过答案真的写不出来。太巧妙了  142.环形链表II:这题写过但是忘记怎么解的了还是看的答案。下次不能忘记  ......
  • #yyds干货盘点# LeetCode程序员面试金典:移除链表元素
    1.简述:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。 示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输出:[]示例3:输入:head=[7,7,7,7],val=7输出:[]2.代码实现:class......
  • LeetCode 47. 全排列 II
    classSolution{public:vector<vector<int>>res;vector<int>path;boolst[10];voiddfs(vector<int>nums,intu){if(u==nums.size()){res.push_back(path);return;......
  • 小米6刷origin os使用joviincar教程
    小米6刷originos使用joviincar教程此教程尽量简化流程,在不用扩容分区的情况下直接刷入originos实现joviincar的使用。1、前期准备1)解锁米62)工具集准备Adb工具集(https://www.xitongzhijia.net/soft/218036.html)Originos卡刷包(https://www.ziyuanyo.com/html/34......
  • LabVIEW|小技巧:16进制字符串至ASCII字符串转换
    在使用LabVIEW进行设备间的通信的时候,对于16进制的字符串以及ASCII字符串的处理是比较常见的,在这里,提供两种字符串之间的转换一个方式,需要自取。......