马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
思绪和时间复杂度
- 思绪:标题中的意思为是值类似的情况下的右边第一个最大的元素,以是直接在nums2中探求下一个最大元素即可,要用map记载一下下标和值,在nums中找到下一个最大值,还要确认当前比力的值是否在num1中
- 时间复杂度:
代码
- class Solution {
- public:
- vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
- vector<int> res(nums1.size(), -1);
- // 遍历nums2,找到nums2的每一个元素在右边第一个大的元素,然后利用元素值定位nums1,找到下标
- unordered_map<int, int> ump;
-
- for(int i = 0; i < nums1.size(); i++){
- ump[nums1[i]] = i;
- }
- stack<int> st;
- st.push(0);
- for(int i = 1; i < nums2.size(); i++){
- if(nums2[i] > nums2[st.top()] ){
- while(!st.empty() && nums2[i] > nums2[st.top()] ){
- if(ump.count(nums2[st.top()]) >= 1){
- int index = ump[nums2[st.top()]];
- res[index] = nums2[i];
- }
- st.pop();
- }
- st.push(i);
- }else{
- st.push(i);
- }
- }
- return res;
- }
- };
复制代码 |