链接:
题意
循环数组,找出每个元素的往后最近且大于它的元素
解:
今天没试暴力啊,大概率是过不了的
思路就是先找到最大的数,最大数的结果肯定是-1,然后倒着遍历数组,用一个栈来从大到小的存放数字,就可以很方便的得到离自身最近的比自己大的数字,同时由于是倒着遍历,所以栈内数字一定在当前遍历的数字之后
核心思路是,从后往前遍历时,后遍历到的数字(位置靠前)的大数字是可以完全替换掉先遍历到的小数字(位置靠后)
实际代码:
#include
using namespace std;
vector nextGreaterElements(vector& nums)
{
int maxIndex=-1;
int lg=nums.size();
stacktMax;
vectorans(lg,0);
for(int i=0;inums[maxIndex])
{
maxIndex=i;
}
}
ans[maxIndex]=-1;tMax.push(nums[maxIndex]);
for(int i=1;i nums;
int temp;
while(cin>>temp)
{
nums.push_back(temp);
}
vectorans=nextGreaterElements(nums);
int lg=ans.size();
//cout<<"lg:"<
限制:
1 <= nums.length <= 104
-109 <= nums[i] <= 109