数组

时间:2017-06-07 15:34:52

标签: c++ arrays

#include<iostream>
#include <stack>
using namespace std;

void printNextGreaterElement(int input[], int inputSize) {
    stack<int> s;
    s.push(input[0]);
    for (int i = 1; i < inputSize; i++) {
        while (!s.empty() && s.top() < input[i]) {
            cout<<"Next greater element for "<<s.top()<<"\t = "<<input[i]<<"\n";
            s.pop();
        }
        s.push(input[i]);
    }
    while (!s.empty()) {
        int top = (int) s.top();
        s.pop();
        cout<<"Next greater element for "<<top<<"\t = null\n";
    }
}

int main() {
    int input[] = { 98, 23, 54, 12, 20, 7, 27 };
    printNextGreaterElement(input, 7);
    return 0;
}

我在数组中学习了NGE,并且遇到了我在geeksforgeeks和其他网站上发现的这段代码,但这不会给测试用例提供错误的输出:

14 p 10 3 12 4 2 9 13 0 8 11 1 7 5 6

1 个答案:

答案 0 :(得分:0)

  

给定一个数组,为每个元素打印Next Greater Element(NGE)。元素x的下一个更大元素是数组中x右侧的第一个更大元素。

您的代码似乎没问题,并且输出的输入正确,您输出错误的输出如下。

输入如您所述

14 
10 3 12 4 2 9 13 0 8 11 1 7 5 6

输出

Next greater element for 3       = 12
Next greater element for 10      = 12
Next greater element for 2       = 9
Next greater element for 4       = 9
Next greater element for 9       = 13
Next greater element for 12      = 13
Next greater element for 0       = 8
Next greater element for 8       = 11
Next greater element for 1       = 7
Next greater element for 5       = 6
Next greater element for 6       = null
Next greater element for 7       = null
Next greater element for 11      = null
Next greater element for 13      = null

例如,数组中的第二个元素是3,数组中的下一个更大元素是12(这是输出)。 这里没有给出对算法的解释,因为它在你提到的post中写得很好。