最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript棧的壓入與彈出序列校驗

 更新時間:2022年09月15日 10:53:42   作者:神奇的程序員  
這篇文章主要為大家介紹了TypeScript棧的壓入與彈出序列校驗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

有兩個整數(shù)序列,第一個序列表示棧的壓入順序,判斷第二個序列是否為該棧的彈出順序。假設(shè)壓入棧的數(shù)字均不相等。例如,序列[1, 2, 3, 4, 5]是某棧的壓棧序列,序列[4, 5, 3, 2, 1]是該棧序列對應(yīng)的一個彈出序列,但[4, 3, 5, 1, 2]就不可能是該壓棧序列的彈出序列。

思路分析

仔細(xì)分析題目后,我們很直觀的想法就是構(gòu)造一個輔助棧,把壓入序列中的數(shù)字依次壓入該輔助棧。按照彈出序列的順序依次從該棧中彈出數(shù)字,如果輔助棧被清空則代表此序列是它的一個彈出序列,否則就不可能是一個彈出序列。

彈出序列滿足條件

如下圖所示,它的壓入過程為:

取出彈出序列的第1個元素,維護一個已取索引,在壓入序列中從已取索引位置開始尋找與之相等的元素,將它之前的數(shù)字和其本身依次入棧,每取1個元素就將索引自增1次

  • 此時,棧頂元素與彈出序列的第1個元素相等,將棧頂元素出棧。

取出彈出序列的第2個元素,在壓入序列中從已取索引位置開始尋找與之相等的元素,將它之前的數(shù)字和其本身依次入棧。

  • 此時,棧頂元素與彈出序列的第2個元素相等,將棧頂元素出棧。

取出彈出序列的第3個元素,此時,壓入序列的元素已經(jīng)被取完。我們繼續(xù)判斷 輔助棧中的元素是否與彈出序列的元素相等。

  • 棧頂元素為3,要彈出的元素也是3,二者相等,棧頂元素出棧

取出彈出序列的第4個元素

  • 棧頂元素為2,要彈出的元素也是2,二者相等,棧頂元素出棧

取出彈出序列的第5個元素

  • 棧頂元素為1,要彈出的元素也是1,二者相等,棧頂元素出棧

彈出序列已取完,輔助棧已清空。 該彈出序列屬于壓入序列的一個彈出順序

彈出序列不滿足條件

接下來,我們來分析下它不是壓入序列的彈出順序的情況,它的壓入過程與滿足條件時一樣,唯獨不同的是,彈出序列的第3個元素從輔助棧出棧后,壓入序列已經(jīng)被取完。此時,彈出序列的第4個元素是1,輔助棧的棧頂元素是2,二者不等,那么該序列肯定不是壓入序列的彈出順序。

實現(xiàn)代碼

經(jīng)過上面的分析,我們已經(jīng)知道了如何解決這個問題。思路已明確,接下來,我們就可以愉快的進入編碼環(huán)節(jié)了??

export function StackPushAndPopSequence(
  pushSequence: Array<number>,
  popupSequence: Array<number>
): boolean {
  if (pushSequence.length === 0 || popupSequence.length === 0) return false;
  // 下一個入棧、出棧索引
  let nextPushIndex = 0;
  let nextPopIndex = 0;
  // 輔助棧
  const stackData = new Stack();
  // 下一個彈出序列存在則執(zhí)行進一步的判斷
  while (nextPopIndex < popupSequence.length) {
    // 下一個彈出序列的元素與棧頂元素不等則入棧
    while (
      nextPushIndex < pushSequence.length &&
      popupSequence[nextPopIndex] !== stackData.peek()
    ) {
      stackData.push(pushSequence[nextPushIndex]);
      nextPushIndex++;
    }
    // 棧頂元素與下一個彈出序列元素相等則出棧
    if (stackData.peek() === popupSequence[nextPopIndex]) {
      stackData.pop();
      nextPopIndex++;
    } else {
      // 元素不等則終止循環(huán),此時壓入序列已經(jīng)全部壓入輔助棧,該序列不可能是一個彈出序列
      break;
    }
    // 輔助棧清空,則代表彈出序列是正確的
    if (stackData.isEmpty()) {
      return true;
    }
  }
  return false;
}

最后,我們將開頭列舉的例子來驗證下上述代碼是否正確執(zhí)行,如下所示:

const pushSuite = [1, 2, 3, 4, 5];
const popSuite1 = [4, 5, 3, 2, 1];
const popSuite2 = [4, 3, 5, 1, 2];
const result1 = StackPushAndPopSequence(pushSuite, popSuite1);
const result2 = StackPushAndPopSequence(pushSuite, popSuite2);
console.log(result1, result2);

示例代碼

StackPushAndPopSequence.ts

stackPushAndPopSequence-test.ts

以上就是TypeScript棧的壓入與彈出序列校驗的詳細(xì)內(nèi)容,更多關(guān)于TypeScript 棧序列校驗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS開發(fā) 富文本編輯器TinyMCE詳解

    JS開發(fā) 富文本編輯器TinyMCE詳解

    這篇文章主要介紹了Java開發(fā) 富文本編輯器TinyMCE詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • jscpd統(tǒng)計項目中的代碼重復(fù)度使用詳解

    jscpd統(tǒng)計項目中的代碼重復(fù)度使用詳解

    這篇文章主要為大家介紹了jscpd統(tǒng)計項目中的代碼重復(fù)度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Page?Visibility?API?教程示例

    Page?Visibility?API?教程示例

    這篇文章主要為大家介紹了Page?Visibility?API?的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 詳解使用yeoman打造自己的項目腳手架

    詳解使用yeoman打造自己的項目腳手架

    這篇文章主要為大家介紹了使用yeoman打造自己的項目腳手架實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 微信小程序網(wǎng)絡(luò)請求wx.request詳解及實例

    微信小程序網(wǎng)絡(luò)請求wx.request詳解及實例

    這篇文章主要介紹了微信小程序網(wǎng)絡(luò)請求wx.request詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 使用純JavaScript封裝一個消息提示條功能示例詳解

    使用純JavaScript封裝一個消息提示條功能示例詳解

    這篇文章主要為大家介紹了使用純JavaScript封裝一個消息提示條功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 微信小程序 新建登錄頁并實現(xiàn)tabBar隱藏

    微信小程序 新建登錄頁并實現(xiàn)tabBar隱藏

    這篇文章主要介紹了微信小程序 新建登錄頁并實現(xiàn)tabBar隱藏的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 類和原型的設(shè)計模式之復(fù)制與委托差異

    類和原型的設(shè)計模式之復(fù)制與委托差異

    這篇文章主要為大家介紹了類和原型的設(shè)計模式之復(fù)制與委托差異詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 微信小程序 頁面跳轉(zhuǎn)如何實現(xiàn)傳值

    微信小程序 頁面跳轉(zhuǎn)如何實現(xiàn)傳值

    這篇文章主要介紹了微信小程序 頁面跳轉(zhuǎn)如何實現(xiàn)傳值的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 手寫實現(xiàn)JS中的new

    手寫實現(xiàn)JS中的new

    這篇文章主要介紹JS中的new,new 運算符創(chuàng)建一個用戶定義的對象類型的實例或具有構(gòu)造函數(shù)的內(nèi)置對象的實例。下面我們一起來看看我呢很臟具體內(nèi)容的詳細(xì)介紹,需要的朋友可以參考一下
    2021-11-11

最新評論

游戏| 五峰| 达州市| 商南县| 枣庄市| 明水县| 阳新县| 革吉县| 会宁县| 新疆| 东源县| 奎屯市| 山西省| 乌拉特中旗| 拜城县| 调兵山市| 尼玛县| 淮安市| 乳山市| 项城市| 长泰县| 南京市| 绥芬河市| 琼中| 浪卡子县| 凤凰县| 蒙山县| 四川省| 崇礼县| 原阳县| 开鲁县| 武鸣县| 五大连池市| 杭锦旗| 肥东县| 聂拉木县| 清水河县| 泗洪县| 义乌市| 昭苏县| 桃园市|