首页 > 其他分享 >下一个更大的元素

下一个更大的元素

时间:2023-01-09 00:55:26浏览次数:41  
标签:一个 元素 st result 更大 include nums1 nums2

#include<iostream>
#include<vector>
#include<stack>
#include<unordered_map>
using namespace std;

// 下一个更大元素

// 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。
// 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。
// nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应
// 位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。

// 示例 1:
// 输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
// 输出: [-1,3,-1]

class Solution{
    public:
        vector<int> nextGreaterElement(vector<int>& nums1,vector<int>& nums2){
          stack<int> st;
          vector<int> result(nums1.size(),-1);
          if(nums1.size()==0)return result;
          unordered_map<int,int> umap;
          for(int i=0;i<nums1.size();i++){
              umap[nums1[i]]=i;
          }
          st.push(0);
          for(int i=1;i<nums2.size();i++){
              if(nums2[i]<nums2[st.top()]){
                  st.push(i);
              }else if(nums2[i]==nums2[st.top()]){
                  st.push(i);
              }else{
                  while(!st.empty()&&nums2[i] > nums2[st.top()]){
                      if(umap.count(nums2[st.top()]>0)){
                          int index=umap[nums2[st.top()]];
                          result[index]=nums2[i];
                      }
                      st.pop();
                  }
                  st.push(i);
              }
          }
          return result;

        }
};

int main(){
    return 0;
}

标签:一个,元素,st,result,更大,include,nums1,nums2
From: https://www.cnblogs.com/codingggo/p/17035848.html

相关文章