LeetcodestackAqueneスタックのプッシュおよびポップシーケンス

記事のディレクトリ

THE

問題

ここに画像の説明を挿入

解決

コード

/*
思路: 这道题一开始我都看不懂。。。不知道找什么。看了一下分析才发现, 这道题的输入中间是可以穿插输出的。
那么整体的思路就是压入的时候判断是否等于输出的第一个了, 如果等于的话代表这个被弹出了,然后继续压入判断。

- 
- 
- - 
- - 
- 
*/

class Solution {
    
    
public:
   bool IsPopOrder(vector<int> pushV,vector<int> popV) {
    
    
       if(pushV.size()!= popV.size()) return false;
       stack<int> in ;
       
       int j = 0;
       for(int i = 0; i<pushV.size();i++){
    
    
           if(pushV[i]!=popV[j])in.push(pushV[i]);
           else {
    
    
               
               ++j;
               while((!in.empty())&&(in.top()==popV[j])){
    
    
                   in.pop();
                   ++j;
               }                    
           }
       }
       return in.empty();
       
       
   }
};


まとめと考察

  1. // while(!in.empty())&&(in.top()== popV [j])とwhile((in.top()== popV [j])&&(!in.empty() )違い。最初の判断は空で終了しますが、jを前に置くと、範囲外になります。ロジックは問題ありませんが、実際には範囲外の判断です。支払う必要があります。将来のデザインへの注目。

おすすめ

転載: blog.csdn.net/liupeng19970119/article/details/114259209