其他分享
首页 > 其他分享> > leetcode496-下一个更大元素I——单调栈解决下一个更大元素问题

leetcode496-下一个更大元素I——单调栈解决下一个更大元素问题

作者:互联网

 

https://leetcode.cn/problems/next-greater-element-i/

方法一:暴力

vector<int> res;int size1=nums1.size(),size2=nums2.size();         for(int i=0;i<size1;i++)         {             int tempj;bool flag=false;             for(int j=0;j<size2;j++)             {                 if(nums1[i]==nums2[j]&&!flag)                 {                     tempj=j;flag=true;continue;                 }                 if(flag&&nums2[j]>nums2[tempj])                 {                     res.push_back(nums2[j]);break;                 }             }             if(i==res.size())   res.push_back(-1);         }         return res; 方法二:单调栈 暴力解法的时间复杂度为o(n^2),对于nums1中的每一个数都要重复地遍历nums2数组,造成了很多不必要的时间开销。 使用一个哈希表记录nums2中每一个元素的下一个更大值,然后只需要遍历一次nums1数组就立刻知道对应nums2数组中的下一个更大值 https://leetcode.cn/problems/next-greater-element-i/solution/dan-diao-zhan-jie-jue-next-greater-number-yi-lei-w/ 把数组中的元素当成是身高不同的人,某数的下一个更大值就是第一个遮挡右边视线的数

 

 

 

 

       int size1=nums1.size(),size2=nums2.size();         stack<int> bigger;         unordered_map<int,int> number_map;         vector<int> res;//返回结果         for(int i=size2-1;i>=0;i--)         {             while(!bigger.empty()&&bigger.top()<=nums2[i])             {                 bigger.pop();             }             number_map.emplace(nums2[i],bigger.empty()?-1:bigger.top());             bigger.push(nums2[i]);         }         for(int i=0;i<size1;i++)         {             res.push_back(number_map[nums1[i]]);         }         return res;

 

标签:int,res,元素,更大值,leetcode496,更大,nums1,nums2,size
来源: https://www.cnblogs.com/uacs2024/p/16654827.html