zoukankan      html  css  js  c++  java
  • 全是套路——出栈顺序

    实习终于结束了,好久没有总结编程问题了,因为最近真是没怎么写程序。

    今天做华为的火车进站问题,这是一道看似像全排列,其实是栈的问题。

    看了一些网上的写法,掌握了一种思路,也是种投机取巧的方法:

    先产生序列的全排列,然后再全排列里面去除不可能的出栈顺序。

    1.全排列很好产生,用stl里面的next_permutation(begin,end)

    2.判断这个排列是不是正确的出栈顺序。

    就第2点:

    1.给一种进栈顺序加上序号,比如4,2,8这么进栈,则4为0,2为1,8为2,以此类推。只是想表明一个顺序,4在前面进栈,然后是2最后是8

    2.抓住出栈的规则,比如入栈序列:1 2 3 4 5 6,出栈序列,4,3,5,2,6,1。

    4先出栈,则4前面的321肯定在栈内,必然是按顺序出栈的(中间可能夹杂其他元素)。3出栈,前面的21肯定也是这样。

    所以可以总结一句话:

    出栈的每一个元素之后的所有下标比它小的元素,这些元素的下标一定是有序的!

    下标:之前所说的序号。就是入栈顺序。

    举例来看,4,3,5,2,6,1。4之后的3 2 1有序,3后面的2 1有序,5 后面的 2 1有序,2后面的1有序,6后面的1有序。

    所以,这样就简单了。代码就不上了,这是个投机取巧的方法,今天太困了,脑子转不过来,递归写不了。

     
  • 相关阅读:
    Android入门:DDMS视图
    Android入门:EditText
    Hibernate入门:关联规则之多对一和一对多
    MyEclipse开发Rest服务入门
    Hibernate入门:使用C3P0连接池
    InfoQ:深入浅出REST
    二维码的编码与解码辅助类
    Android系统Resource之Drawable
    Android开发中的点滴
    粒子效果的简单实现
  • 原文地址:https://www.cnblogs.com/wyc199288/p/5791326.html
Copyright © 2011-2022 走看看