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 From: https://www.cnblogs.com/uacs2024/p/16654827.html