思路和时间复杂度
- 思路:题目中的意思为是值相同的情况下的右边第一个最大的元素,所以直接在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;}
};