题意:返回数组中比当前元素的索引大的且值大的第一个元素。即当查找数组A中的第二个元素A[1]=13时,要从A[2]开始往后找,发现第一个大于13的元素时21,所以将21保存到对应位置;如果没有找到,则保存-1。
注意:数组中的最后一个元素,没有下一个元素了,所以肯定保存-1。
思路:从数组A 从后往前遍历,先将-1压入栈s中,若A中当前元素大于栈顶元素且栈顶元素不为-1,则循环s.pop(); 直到找到一个比当前元素大的栈顶元素或当前栈顶元素为-1,则将栈顶元素保存在vector数组res中,且将当前元素压栈(因为此时栈顶元素为最大的元素)。最后将res输出。
class NextElement { public: vector<int> findNext(vector<int> A, int n) { // write code here vector<int> result; stack<int> s; s.push(-1); for(int i=n-1; i>=0; --i){ while(A[i]>=s.top() && s.top()!=-1) s.pop(); result.push_back(s.top()); s.push(A[i]); } reverse(result.begin(), result.end()); return result; } };