下一个更大的元素II
和496 类似,为循环数组。将num数组扩充两倍连起来即可
class Solution { public: vector<int> nextGreaterElements(vector<int>& nums) { vector<int> result(nums.size(),-1); vector<int> my_nums(nums.begin() , nums.end()); stack<int> st; int indnx; // for(auto it:nums) my_nums.push_back(it); //循环插入 my_nums.insert(my_nums.end(), nums.begin(), nums.end()); //insert插入 st.push(0); for(int i=1 ; i<my_nums.size() ;i++) { while(st.empty()==0 && my_nums[i] > my_nums[st.top()]) { //检测是否是第二圈 if(st.top()>=nums.size()) indnx = st.top() - nums.size(); else indnx = st.top(); result[indnx] = my_nums[i]; st.pop(); } st.push(i); } return result; } };
二刷
class Solution { public: vector<int> nextGreaterElements(vector<int>& nums) { vector<int> result(nums.size(), -1); stack<int> my_stack; int size = nums.size(); for(int i=0 ; i<size ;i++) nums.push_back(nums[i]); my_stack.push(0); for(int i=1 ; i<nums.size() ;i++) { while( my_stack.size() != 0 && nums[i] > nums[my_stack.top()]) { if(my_stack.top() < size ) result[my_stack.top()] = nums[i]; my_stack.pop(); } my_stack.push(i); } return result; } };