seo怎样新建网站,东旭网站建设,泉州网站设计理念培训,公司内部网站页面设计链接#xff1a;
503. 下一个更大元素 II
题意
循环数组#xff0c;找出每个元素的往后最近且大于它的元素
解#xff1a;
今天没试暴力啊#xff0c;大概率是过不了的
思路就是先找到最大的数#xff0c;最大数的结果肯定是-1#xff0c;然后倒着遍历数组#xf…链接
503. 下一个更大元素 II
题意
循环数组找出每个元素的往后最近且大于它的元素
解
今天没试暴力啊大概率是过不了的
思路就是先找到最大的数最大数的结果肯定是-1然后倒着遍历数组用一个栈来从大到小的存放数字就可以很方便的得到离自身最近的比自己大的数字同时由于是倒着遍历所以栈内数字一定在当前遍历的数字之后
核心思路是从后往前遍历时后遍历到的数字位置靠前的大数字是可以完全替换掉先遍历到的小数字位置靠后
实际代码
#includebits/stdc.h
using namespace std;
vectorint nextGreaterElements(vectorint nums)
{int maxIndex-1;int lgnums.size();stackinttMax;vectorintans(lg,0);for(int i0;ilg;i){if(maxIndex-1 || nums[i]nums[maxIndex]){maxIndexi;}}ans[maxIndex]-1;tMax.push(nums[maxIndex]);for(int i1;ilg;i){int mao(maxIndex-ilg)%lg;while(tMax.size() tMax.top()nums[mao]){tMax.pop();}if(tMax.size()){ans[mao]tMax.top();}else ans[mao]-1;tMax.push(nums[mao]);}return ans;
}
int main()
{vectorint nums;int temp;while(cintemp){nums.push_back(temp);}vectorintansnextGreaterElements(nums);int lgans.size();//coutlg:lgendl;for(int i0;ilg;i){couti:ans[i]endl;}return 0;
}限制
1 nums.length 104-109 nums[i] 109