算法:输入一个数组,对每个元素打印第一个满足比该元素大并且在该元素后面的元素的下标,若不存在这样的元素则打印-1。

INPUT
01234567
59304569
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;
}

测试:

[root@localhost 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) 
[root@localhost 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) 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值