zoukankan      html  css  js  c++  java
  • 剑指offer系列15:栈的压入、弹出序列

    今天这道题我花了流程图,思路清晰了很多,对于自己哪方面不够熟悉也清楚了。这个题可以建立一个辅助的栈,建立一个循环,一直判断第二个序列中的元素是否在栈顶,如果在栈顶就弹出栈顶的元素并且寻找第二个序列中的下一个数字,如果发现不在栈顶就一直给栈顶添加元素直到在栈顶遇见这个数字。代码在下面,第一次知道for循环还可以这么写,这样等于嵌套了两个for循环,而且循环中递增项在循环内部。

     1 #include<iostream>
     2 #include<vector>
     3 #include<stack>
     4 using namespace std;
     5 class Solution {
     6 public:
     7     bool IsPopOrder(vector<int> pushV, vector<int> popV) {
     8         stack<int> st;
     9         int i, j = 0;
    10         int len = popV.size();
    11         st.push(pushV[0]);
    12         for (i = 0, j = 0; i < len&&j < len; )
    13         {
    14             if (popV[j] == st.top() && st.empty() != true)//判断是否在栈顶
    15             {
    16                 st.pop();
    17                 j++;
    18             }
    19             else {//这里要注意,因为进入循环的条件是i<len,所以i可能等于len-1,此时不能访问pushV[++i],非法
    20                 if (i + 1 < len)
    21                     st.push(pushV[++i]);
    22                 else
    23                     i++;//如果i+1=len,还没有找到,说明没有了,给i+1让循环出来
    24             }
    25         }
    26         if (st.empty() == true)
    27             return true;
    28         else
    29             return false;
    30     }
    31 };
    32 int main()
    33 {
    34     Solution so;
    35     vector<int> v1 = { 1,2,3,4,5 };
    36     vector<int> v2 = { 4,5,3,2,1 };
    37     vector<int> v3 = { 4,3,5,1,2 };
    38     cout << so.IsPopOrder(v1, v2) << endl;
    39     cout << so.IsPopOrder(v1, v3) << endl;
    40     return 0;
    41 }

    今天总结两点:

    1,思路清晰很重要,画流程图

    2.一个思路进行不下去想想类似的其他表达方式,思路要灵活

    今天我参考github上答案的时候,发现参考了答案之后也报错,不能一味的相信答案。答案在中间我注释的地方没有考虑到,因此死循环了。

    最后,我想写一点最近关于学习的感悟。首先,学习是自己的事,因此你在学习的时候不要跟别人做比较。跟别人比容易迷失自己,只要自己清楚自己的该做什么,以什么样的进度去做就够了,多关注自己。我知道这样很难,但是我想一点一点去努力尝试做到。其次,学习的目的可以提高自己,也可以是开阔眼界,但绝对不是让别人觉得我爱学习,别虚荣,没有一点意义。再说了,你学习不学习,除了你自己,还有谁真的在乎呢?

  • 相关阅读:
    漂亮灵活设置的jquery通知提示插件toastr
    C# 对List<T>取交集、连集及差集
    查看sqlserver被锁的表以及如何解锁.
    javascript的setTimeout()用法总结,js的setTimeout()方法
    日志插件 log4net 的使用
    Log4NET简介
    解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接
    也说Autofac在MVC的简单实践:破解在Controller构造函数中的实例化
    Autofac 依赖注入 ASP.NET MVC5 插件机制中插件的简单实现
    Asp.net mvc中整合autofac
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11015159.html
Copyright © 2011-2022 走看看