【演算法】輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。
輸入兩個整數序列。其中一個序列表示棧的push 順序,判斷另一個序列有沒有可能是對應的pop 順序。
為了簡單起見,我們假設push 序列的任意兩個整數都是不相等的。
比如輸入的push 序列是1、2、3、4、5,那麼4、5、3、2、1 就有可能是一個pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。
思路:
1.首先新建一個棧模擬入棧入棧,都是在push序列中進行。
2.將push序列依次開始入棧,直到棧頂元素等於pop序列的第一個元素。
3.push的棧頂元素出棧,pop序列移到第二元素。
4.如果push棧頂繼續等於pop序列現在的元素,則繼續出棧並pop後移。
5.如果push已經全部入棧但是pop序列未遍歷結束,且棧頂元素不等於現在所指元素則返回false。
6.如果棧為空,且pop也已經遍歷結束,則返回true
按照上述思路,給出了原始碼:程式碼中有兩個實現,其中第一個是按照我的思路實現的,另外一個是網上的答案。
#include <iostream>
#include <stack>
using namespace std;
bool isPopSerial(int push[], int pop[], int n)//我自己寫的一種方法,注意函式名
{
int i=0,j=0;
stack<int> mystack;
while(i < n)//只要沒有全部將push陣列push到棧中
{
mystack.push(push[i]);
i++;
while(!mystack.empty() && mystack.top() == pop[j])
{
mystack.pop();
j++;
}
}
if( mystack.empty() && j==n)//最後是pop序列的唯一條件:棧變空了,且pop序列遊標到了最後
return true;
return false;//除此之外都不是pop序列
}
bool isPopSeries(int push[],int pop[],int length)//網上流傳的經典答案
{
if(!push||!pop||length<=0)
return false;
stack<int> temp;
int pushNum=0;
int i = 0;
while(i < length)
{
while(temp.empty()||temp.top()!=pop[i])
{
if(pushNum < length)
temp.push(push[pushNum++]);
else
return false;
}
if(!temp.empty()&&temp.top()==pop[i])
{
temp.pop();
i++;
}
}
return true;
}
int main()
{
int pushArray[5] = {1,2,3,4,5};
int popArray[5] = {4,5,3,2,1};
if(isPopSerial(pushArray,popArray,5))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}
相關文章
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- 記一個TS 列舉順序的坑
- 順序棧————遍歷、出棧、入棧
- 如何斷言兩個元素順序不一致的列表相同?
- 如何保持json序列化的順序性?JSON
- 順序棧的簡單操作
- 順序棧的實現方式
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- Win10怎麼調整輸入法的順序?Win10
- Gson – 比較兩個順序無關的json字串JSON字串
- 順序棧、鏈棧基本操作
- 同一個元素中有多個class,優先順序
- 判斷一個陣列是否排好序陣列
- 棧1: 順序儲存
- 刷題系列 - 合併兩個順序佇列為一個新的佇列佇列
- join方法應用之一——按順序輸出三個執行緒執行緒
- JavaScript調整option順序JavaScript
- AIX磁碟順序調整AI
- 給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。排序陣列
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢
- OJ刷題之《輸入三個字串,按由小到大的順序輸出》字串
- 一個針對 Python 語句執行順序的練習Python
- 靜態順序表和動態順序表 對比
- 中斷優先順序
- javascript載入順序JavaScript
- 列定義的順序和列儲存的順序
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- [LeetCode] Is Subsequence 判斷一個字串是否為另一個的子序列LeetCode字串
- 調整陣列元素順序演算法陣列演算法
- 輸入3個整數a,b,c,要求按由小到大的順序將它們輸出,用函式實現函式
- 區域性變數申請棧空間時的入棧順序變數
- jQuery調整li元素順序jQuery
- 【演算法】判斷整數序列是不是二元查詢樹的後序遍歷結果演算法
- SpringBoot配置檔案優先順序載入順序Spring Boot
- PG 中表示式的計算順序
- WIN10如何更改輸入法順序 win10怎樣修改電腦輸入法順序Win10
- FastJson bean序列化屬性順序問題ASTJSONBean