根據已知入棧順序判斷一個數組是否是出棧順序
題目含義已經很明確了,現在開始使用一個樣例輸入和輸出
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