一:题目
二:上码
class Solution {
public:/**思路: 1.将两个nums拼接到一块这里拼接到一块,当我们最后的元素找不到比其大的时候 就会开始从头开始这样的话就可以继续进行 入栈 或者出栈的操作入栈就是比我栈顶小的元素,出栈的话 那就是 找到了比其大的元素了只要我们拼接的数组中第一个数组一旦找齐了答案了 我们就不用再去管拼接数组的第二个范围了 因为我们之所以拼接第二个数组的话 那就是为了第一数组最后几个元素找到比起大的元素2.再利用单调栈求解*/vector<int> nextGreaterElements(vector<int>& nums) {vector<int> nums1(nums.begin(),nums.end());//将nums中的值赋给nums1nums.insert(nums.end(),nums1.begin(),nums1.end());//在nums后面进行插入操作vector<int> ans(nums.size(),-1);stack<int> st;st.push(0);for (int i= 1; i < nums.size(); i++) {while(!st.empty() && nums[i] > nums[st.top()]) {ans[st.top()] = nums[i];st.pop();}st.push(i);//当 当前的元素是小于栈顶下标所对应的值 那么就入栈 即便一直入栈 //那么就证明在没有比起大的元素出现}ans.resize(ans.size()/2);return ans;}
};