1. 程式人生 > >根據已知入棧順序判斷一個數組是否是出棧順序

根據已知入棧順序判斷一個數組是否是出棧順序

題目含義已經很明確了,現在開始使用一個樣例輸入和輸出

int a[]={1,2,3,4,5};//原始的入棧順序
int b[]={4,5,3,1,2};//出棧順序
int b1[]={4,5,3,2,1};//出棧順序

我的策略是依次遍歷給定的出棧順序陣列,從第一個開始,以b為例,

1、第一個元素是4,則在a中確定4所在的位置,將4之前的所有元素入棧記為sck,並記錄該位置nCount

2、開始遍歷出棧陣列的下一個元素,記為tmp,首先根nCount,如果nCount小於長度,也即a[nCount]還是一個有效整數,則判斷tmp和a[nCount]是否相等,如果相等,則繼續步驟2,如果不相等,判斷sck中是否還有元素,如果有,則彈出頂端元素,判斷是否相等,如果相等,繼續步驟2,不相等則直接返回,不是正確的出戰順序,如果棧中的元素個數為0,同樣也退出演算法,不正確的出棧順序

int Check(int* a,int* b1,int length)
{
	if(NULL==a||NULL==b1)
		return 0;
	stack<int> sck;
	int nCount=0;	
	for(int i=0;i<length;i++)
	{
		int tmp=b1[i];
		if(i==0)
		{
			//確定tmp在a中的位置
			int index=-1;
			for(int j=0;j<length;j++)
			{
				if(tmp==a[j])
				{
					index=j;
					nCount=j+1;
					break;
				}
				else
				{
					sck.push(a[j]);
				}
			}
			//將元素已經入棧
			if(index==-1)
			{
				return 0;

			}
		}
		//接下來處理一般元素
		else
		{
			//首先檢視棧外的第一個元素
			if(nCount<length)
			{
				if(tmp==a[nCount])
				{
					nCount++;
				}
			}
			else if(sck.size()>0)
			{
				int mm=sck.top();
				sck.pop();
				if(mm==tmp)
				{
					continue;
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}
	}
	return 1;
}


相關推薦

根據順序判斷個數是否是順序

題目含義已經很明確了,現在開始使用一個樣例輸入和輸出 int a[]={1,2,3,4,5};//原始的入棧順序 int b[]={4,5,3,1,2};//出棧順序 int b1[]={4,5,3,2,1};//出棧順序 我的策略是依次遍歷給定的出棧順序陣列,從第一個開始

二叉樹中如何根據的兩種遍歷方法,求第三種遍歷的結果

此題的答案是B。詳細解析如下:知道先序是根->左->右,中序是左->根->右,後序是左->右->根,但是以前一直沒整明白怎麼根據已知兩個序遍歷求第三種遍歷(前提是一定要知道中序遍歷),今天做這個題的時候忽然腦袋開竅了。最重要的一點就是:找到

判斷個數是不是維數

fun recursive dex 遞歸 function rec strong p s count int count ( mixed $var [, int $mode ] ) -- 計算數組中的單元數目或對象中的屬性個數 如果可選的 mode 參數設為 COUN

【單調】求個數第一個比他小的數的位置

type 技術分享 bit esp alt log lap while play 【AC】 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int

java 判斷個數是否有重複值

import java.util.HashSet; public class test {     /**      * @param args      */     public stat

LeetCode:416. Partition Equal Subset Sum(判斷個數時候可以平均分為兩半)

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both

資料結構-用逆序個數

#include <iostream> #include <string> #include <stack> using namespace std; stack s; void Reverse(char* a, int n)

C#中怎麼判斷個數中是否存在某個陣列值

(1) 第一種方法: int[] ia = {1,2,3}; int id = Array.IndexOf(ia,1); // 這裡的1就是你要查詢的值 if(id==-1) // 不存在 else // 存在 (2) 第二種方法: string[] strArr =

Java總雜湊表的運用,判斷個數中是否存在相同的元素之間的距離在k以內!

Check if a given array contains duplicate elements within k distance from each other 用雜湊表,複雜度O(n),

PHP如何判斷個數維陣列或者是二維陣列

int count ( mixed $var [, int $mode ] )  --  計算陣列中的單元數目或物件中的屬性個數  如果可選的 mode 引數設為 COUNT_RECURSIVE(或 1),count() 將遞迴地對陣列計數。對計算多維陣列的所有單元

C#實現如何判斷個數中是否有重複的元素

 如何判斷一個數組中是否有重複的元素  實現判斷陣列中是否包含有重複的元素方法 這裡用C#程式碼給出例項 方法一:可以新建一個hashtable利用hashtable的Contains方法進行查詢 1 /// <summary> 2 /// Hash

使用jQuery判斷個數中是否包含某個值

1、當需要在前端為陣列去重的時候,可以使用jQuery的inArray方法來判斷。 2、具體操作如下: var array = ['a','ab','abc']; $.inArray('abc',array);下標從0開始,若結果為-1則表示此陣列中不存在這個值。

如何判斷個數中是否包含一個字元或字串

第一種方法:遍歷陣列 String[] arr1 = {"1","2","3","4","6","7"}; for (int i = 0; i < arr1.length; i++) {if("

PHP中判斷個數是否為空?

GOOGLE之後整理出以下辦法: 一、for迴圈   最簡單也是最直接的方法,用for迴圈來遍歷陣列。對於已知維數的陣列可以判斷,但如果是未知的多維陣列,該怎麼辦? 二、implode();   用implode()將陣列輸出為字串,判斷輸出的字串是否為空。初看上去似乎是個

判斷個數中是否包含某個字串

1.public bool isExist(string[] ss, string str)        {            List<string> ls = new List<string>(ss);            foreach

php如何判斷個數為空陣列

1. isset功能:判斷變數是否被初始化 說明:它不會判斷變數是否為空,並且可以用來判斷陣列中元素是否被定義過 例如: <?php $a = ''; $a['c'] = ''; if (!isset($a)) echo '$a 未被初始化' . "";

JS判斷個數中是否有重複值的三種方法

參考 http://superivan.iteye.com/blog/1131328 var ary = new Array("111","22","33","111"); var s = ary.

個數按從小到大的順序排列

在公司等開發板,只能寫寫簡單的java程式碼來補補腦。程式碼參考了java語言程式設計-基礎篇 需求:將陣列按從小到大的順序排列 不多說,直接上程式碼: 1.按照選擇排序的方法進行排序 public

判斷個數維陣列還是二維陣列

如題:如何判斷一個數組是一維陣列或者是二維陣列?用什麼函式? 判斷數量即可 1 2 3 4 5 6 <?php if (count($array) == count($array, 1)) { echo '是一維陣列'; } else { echo '不是一維陣列'; } P

js判斷個數是否包含另個數

var a = [1,2,5,7,3]; var b = [1,7,2]; function isContained(aa,bb){ if(!(aa instanceof Array)||!(bb instanceof Array)||((aa.length < bb