1. 程式人生 > >微軟演算法100道題-------輸入兩個整數序列。其中一個序列表示棧的push順序, 判斷另一個序列有沒有可能是對應的pop順序。

微軟演算法100道題-------輸入兩個整數序列。其中一個序列表示棧的push順序, 判斷另一個序列有沒有可能是對應的pop順序。

題目:

輸入兩個整數序列。其中一個序列表示棧的push順序,

判斷另一個序列有沒有可能是對應的pop順序。
為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。   


比如輸入的push序列是1、2、3、4、5,那麼4、5、3、2、1就有可能是一個pop系列。
因為可以有如下的push和pop序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
這樣得到的pop序列就是4、5、3、2、1。

但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

思路:

從頭遍歷pop陣列,如果這個數在新建的棧的棧頂時,則彈出,如果不在,則去push陣列中找,找到之後把這個元素之前的數全放入棧中,比如3,則將1,2順序放入棧中,如果找不到,則說明該pop陣列不成立

相關推薦

微軟演算法100-------輸入整數序列其中一個序列表示push順序 判斷一個序列沒有可能對應pop順序

題目: 輸入兩個整數序列。其中一個序列表示棧的push順序, 判斷另一個序列有沒有可能是對應的pop順序。 為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。    比如輸入的push序列

微軟演算法100------求一個矩陣中最大的二維矩陣(元素和最大)

題目: 求一個矩陣中最大的二維矩陣(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)寫出演算法;(2)分析時間複雜度; 思路

演算法--中興面試:輸入整數 n 和 m從數列123.......n 中隨意取幾個數, 使其和等於 m

Q題目 程式設計求解 輸入兩個整數 n 和 m,從數列1,2,3…….n 中隨意取幾個數, 使其和等於 m ,要求將其中所有的可能組合列出來. Answer解法 這道題就是一道典型的動態規劃問題了,思路和揹包問題差不多,m就相當於揹包能容納的

輸入整數序列其中一個序列表示push順序 判斷一個序列沒有可能對應pop順序

題目:輸入兩個整數序列。其中一個序列表示棧的push順序,判斷另一個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。  比如輸入的push序列是1、2、

藍橋杯題目 輸入整數a和b輸出這整數的和a和b都不超過100

問題描述   輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。 演算法描述   由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。

輸入整數n和m從數列1,2,3……n中隨意取幾個數使其和等於m 轉載

輸出 -1 pri str spa private 組合 開始 () 題目:編程求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 分析:分治的思想。可以把問題(m,n)拆分(m - n, n -1)和(m, n -

輸入整數序列第一序列表示的壓入順序判斷第二序列是否為該的彈出順序

ack pan back 表示 return i++ ++ 輸入 gpo 1 class Solution{ 2 public: 3 bool IsPopOrder(vector<int> pushV,vector<int> popV){

輸入整數要求輸出其中值較大者要求用函數來找大數

數字 9.png 圖片 bsp gpo tdi 小數 .com 輸入 /* p176 例7.2 輸入兩個整數,要求輸出其中值較大者。要求用函數來找大數。 (1)函數名:應是見名知意,反應函數的功能,今定名為max (2)函數的類型:由於給定的兩個數是整數,顯然其中

輸入整數求他們相除的餘數用帶參的巨集來實現程式設計序

import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanne

初學指標(輸入整數由大到小輸出)

#include <iostream> using namespace std; int main() { void Swap(int *p1,int *p2); int a,b; cout<<"please enter a and b"<<endl; c

輸入兩個整數序列,第一個序列表示棧的壓入順序,判斷第二個序列是否可能為該的彈出順序。假設壓入的所有數字均不相等例如序列1,2,3,4,5是某的壓入順序,序列4,5,3,2,1是該壓棧序列對應

    輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應     import java

任意輸入整數輸出最大值

/*  * Copyright (c) 2013, 煙臺大學計算機學院 * All rights reserved. * 作    者: 高古尊 * 完成日期:2013 年10  月11  日 * 版 本 號:v1.0 * 樣例輸入:6 9 * 樣例輸出:9 *

輸入整數n和m,從1-n中隨意取幾個數使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 求解思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.遞迴求解 #include<

Java實現輸入整數n和m,從0-n中隨意取幾個數使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.將最大數n加入且n == m,則滿足條件,

輸入整數n和m,從0-n中隨意取幾個數使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。實際上就是一個揹包問題。 求解思路: 1.首先判斷,如果n>m,則n中大於m

輸入整數m和n一個整數k計算m/n結果精確到小數點後k位

#include<stdio.h> int main() { int m,n,k,i; printf("Please input integer m , n and k\n"); scanf("%d%d%d",&m,&n,&k); pri

輸入整數n和m從數列123...n中隨意取幾個數使其和等於m將其所有可能的組合列出來 遞迴求解

/* *[email protected] 轉載請註明出處 *問題:輸入兩個整數n和m,從數列1,2,3,...,n中隨意取幾個數, *使其和等於m,將其所有可能的組合列出來。 *求解思路:(遞迴求解) *(1)如果n>m則數列中>m的部分不可能參與組

程式設計求解輸入整數n和m,從數列1,2,3……n中隨意取幾個數使其和等於m要求將所有的可能組合列出來(揹包問題求解) .

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。實際上就是一個揹包問題。 求解思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.將最大數n加入且n == m,則

輸入整數要求輸出其中值較大者要求用函式來找到大數

#include <stdio.h> #include <conio.h> int main(){   int max(int x,int y);   int a,b,c;  

輸入整數 n 和 m從數列123.......n 中 隨意取幾個數

問題描述:輸入兩個整數n和m,從數列1,2.......n中隨意取幾個數,使其和等於m,要求將其中所有的可能組合列出來。 思路:這個問題其實揹包問題的變形,本文給出兩種解法。       解法一:用遞迴,效率可能低了點。假設問題的解為F(n, m),可分解為兩個子