INPUT
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
5 | 9 | 3 | 0 | 4 | 5 | 6 | 9 |
OUTPUT 元素:5 9 3 0 4 5 6 9 下标:1 -1 4 4 5 6 7 -1
实现方法:用栈实现
步骤1:遍历所有元素做:若栈非空并且栈顶元素小于当前元素则弹出所有小于当前元素的栈内元素,并打印当前元素的下标,然后将当前元素入栈。
步骤2:若栈非空,弹出栈内所有元素并同时打印-1.
C++实现
#include <stack>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv)
{
if (argc==1){
cout<< "usage:./out <num...>" << endl;
exit(1);
}
stack<int> s;
int index = 1;
while (index < argc){
int temp = atoi(argv[index]);
while ((s.size() > 0) && (s.top() < temp)){
cout<< s.top() << "("<< index - 1 << ") ";
s.pop();
}
s.push(temp);
index++;
}
while (s.size() > 0){
cout<< s.top() << "("<< -1 << ") ";
s.pop();
}
cout << endl;
return 0;
}
测试:
[[email protected] home]# ./a.out 2 8 3 4 0 5 2 4 6 3 8 10 3 4 3 29 4 6 4 2 74 3 2 5 3 21 62 29 0 2 43 4 5
2(1) 3(3) 0(5) 4(5) 2(7) 4(8) 5(8) 3(10) 6(10) 8(11) 8(11) 3(13) 3(15) 4(15) 10(15) 4(17) 2(20) 4(20) 6(20) 29(20) 2(23) 3(23) 3(25) 5(25) 21(26) 0(29) 2(30) 29(30) 4(32) 5(-1) 43(-1) 62(-1) 74(-1)
[[email protected] home]# ./a.out 5 9 3 0 4 5 6 9
5(1) 0(4) 3(4) 4(5) 5(6) 6(7) 9(-1) 9(-1)