#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答案 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中写得很好。