牛客-栈:下一个较大元素1,2

题意:返回数组中比当前元素的索引大的且值大的第一个元素。即当查找数组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;
    }
};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/11145884.html