首页 > 其他分享 >496. 下一个更大元素 I

496. 下一个更大元素 I

时间:2023-06-12 11:24:07浏览次数:31  
标签:sta int 元素 更大 496 nums1 nums2

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。


示例 1:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
- 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。

思路跟上一道单调栈是一样的,只是加上map
> 单调栈


class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        int len1 = nums1.size();
        int len2 = nums2.size();
        if(len2 == 1) return {-1};
        //建立map
        unordered_map<int,int> mp;
        stack<int> sta;
        sta.push(0);
        for(int i = 1;i < len2;i++){
            int idx = sta.top();
            while(nums2[idx] < nums2[i]){
                //出栈
                mp[nums2[idx]] = nums2[i];
                sta.pop();
                if(!sta.empty()){
                    idx = sta.top();
                }
                else{
                    break;
                }
            }
            //入栈
            sta.push(i);
        }
        vector<int> answer(len1,-1);
        for(int i = 0;i < len1;i++){
            auto it = mp.find(nums1[i]);
            if(it != mp.end()){
                answer[i] = it->second; 
            }
        }
        return answer;
    }
};

标签:sta,int,元素,更大,496,nums1,nums2
From: https://www.cnblogs.com/lihaoxiang/p/17474510.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......
  • #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......
  • Python测试序列是否所有相邻元素之间都具有升序关系
    代码功能:测试给定序列中是否所有相邻元素都具有严格的升序关系,也就是每个元素都比相邻的后面元素小。......
  • 代码随想录算法训练营第三天| 203.移除链表元素 、 707.设计链表 、206.反转链表
    链表的构造:link.h:1#ifndefLINK_H2#defineLINK_H3#include<vector>45structListNode{6intval;7ListNode*next;8ListNode():val(0),next(nullptr){}9ListNode(intx):val(x),next(nullptr){}10ListNode(in......
  • 小议Python列表和元组中的元素地址连续性
    众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提供的OrderedDict类。在Python中,列表和元组属于有序序列,支持下标随机访问,也支持切片操作。当然,列表是可变序列而元组属于不可变序列,这一......
  • 列表元素循环移位中Python切片的妙用
    之前有个文章中介绍了列表循环移位的3中方法其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如果充分利用Python中的切片技术,可以写成下面更简洁的形式:>>>defdemo(lst,k):x=lst[k-1::-1]y=lst[:k-1:-1]returnlist(reversed(x+y))#测试用......
  • 通过指令的方式来实现元素加载过渡效果
    页面上如何使用给需要过渡的元素添加v-slide-in指令<template><divclass="continer"><divv-slide-inclass="item">1</div><divv-slide-inclass="item">2</div><divv-slide-inc......
  • 链表-移除链表元素
    点击查看代码varremoveElements=function(head,val){vardummyNode=newListNode(-1);//设置一个虚拟头节点dummyNode.next=head;varprev=dummyNode;//prev记录当前节点的前一个节点while(prev.next){//从head开始遍历链表if(......
  • wpf中元素的Visibility和IsVisible出现矛盾的情况
    ui<StackPanelMargin="5"><Borderx:Name="bd1"><TextBlockName="tb1"Text="123"/></Border><Buttonx:Name="btn1"C......