力扣-动态规划-496 下一个更大的元素Ⅰ

[复制链接]
发表于 2025-10-19 01:42:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
思绪和时间复杂度


  • 思绪:标题中的意思为是值类似的情况下的右边第一个最大的元素,以是直接在nums2中探求下一个最大元素即可,要用map记载一下下标和值,在nums中找到下一个最大值,还要确认当前比力的值是否在num1中
  • 时间复杂度: 
          
代码
  1. class Solution {
  2. public:
  3.     vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
  4.         vector<int> res(nums1.size(), -1);
  5.         // 遍历nums2,找到nums2的每一个元素在右边第一个大的元素,然后利用元素值定位nums1,找到下标
  6.         unordered_map<int, int> ump;
  7.         
  8.         for(int i = 0; i < nums1.size(); i++){
  9.             ump[nums1[i]] = i;
  10.         }
  11.         stack<int> st;
  12.         st.push(0);
  13.         for(int i = 1; i < nums2.size(); i++){
  14.             if(nums2[i] > nums2[st.top()] ){
  15.                 while(!st.empty() && nums2[i] > nums2[st.top()] ){
  16.                     if(ump.count(nums2[st.top()]) >= 1){
  17.                         int index = ump[nums2[st.top()]];
  18.                         res[index] = nums2[i];
  19.                     }
  20.                     st.pop();
  21.                 }
  22.                 st.push(i);
  23.             }else{
  24.                 st.push(i);
  25.             }
  26.         }
  27.         return res;
  28.     }
  29. };
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表