标签:int res 元素 更大值 leetcode496 更大 nums1 nums2 size
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。