C++編程,判斷給定序列是否爲正確出棧序列

        這是某資訊APP公司的面試題。

        數1,2,3,...,n按從小到大的順序入棧,給定一個序列,判斷其是否爲一個正確的出棧序列。比如n=5,則“1,4,3,5,2”是一個正確的出棧序列,而"5,4,3,1,2"不是。

        方法是用一個輔助棧保存原棧中未出棧的數,遇到下一個數時,判斷其是否符合出棧規則。代碼如下

#include <iostream>
#include <stack>

using namespace std;

bool rightOrder(int a[], int n) {
	int i, j, m = 0;	//m記錄之前出棧的最大值
	stack<int> s;		//未出棧的數保存在輔助棧s中
	for (i=0; i<n; i++) {
		if (a[i] > m + 1) {
			for (j=m+1; j<a[i]; j++) {
				s.push(j);
			}
			m = a[i];
		}
		if (a[i] == m + 1) {
			m = a[i];
		}
		if (a[i] < m) {
			if (a[i] == s.top()) {
				s.pop();
			} else {
				return false;
			}
		}
	}
	return true;
}

void main() {
	int a[] = {1,4,3,5,2};
	cout << rightOrder(a, 5) << endl;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章