二:上码
class Solution {
public:
/**
思路:1.分析题意:
这里是我们在nums1中的元素是全部出现在nums2中的
我们要找的就是 num1[i] == nums2[j] 的话 在nums2[j]中我们要找到右边第一个比其大的元素
2.OK! 那么我们就可知道的是我们就需要用到单调栈了。
3.那么我们是外层循环是 nums1
内层循环是 nums2
4.确定何种单调
因为我们是要求右边比起大的 那么我们应该用 从栈顶到栈底 递增的
当出现比栈顶大的元素的话 那就是我们求出答案的时候 弹出栈顶
*/
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size() == 1 && nums2.size() == 1) return {-1};
vector<int> ans(nums1.size(),-1);
for (int i = 0; i < nums1.size(); i++) {
for (int j = 0; j < nums2.size(); j++) {
if (nums1[i] == nums2[j]) {//当在nums2中找到nums1中的元素时
// stack<int> st;
// st.push(j);
for (int k = j+1; k < nums2.size(); k++) {
if (nums2[k] > nums2[j]) {
ans[i] = nums2[k];
break;
}
// // st.push(k);
// break;//执行完后跳出该循环 因为我们已经为该元素在栈中找好位置了。
}
break;
}
}
}
return ans;
}
};
写着写着就变成 暴力了 哎!!!!!!!!!!!!!!