自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

每日算法:用兩個棧實現(xiàn)隊列

開發(fā) 前端 算法
用兩個棧實現(xiàn)一個隊列。隊列的聲明如下,請實現(xiàn)它的兩個函數(shù) appendTail 和 deleteHead ,分別完成在隊列尾部插入整數(shù)和在隊列頭部刪除整數(shù)的功能。

[[422522]]

本文轉載自微信公眾號「三分鐘學前端」,作者 sisterAn 。轉載本文請聯(lián)系三分鐘學前端公眾號。

用兩個棧實現(xiàn)一個隊列。隊列的聲明如下,請實現(xiàn)它的兩個函數(shù) appendTail 和 deleteHead ,分別完成在隊列尾部插入整數(shù)和在隊列頭部刪除整數(shù)的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )

示例 1:

  1. 輸入: 
  2. ["CQueue","appendTail","deleteHead","deleteHead"
  3. [[],[3],[],[]] 
  4. 輸出:[null,null,3,-1] 

示例 2:

  1. 輸入: 
  2. ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"
  3. [[],[],[5],[2],[],[]] 
  4. 輸出:[null,-1,null,null,5,2] 

提示:

  • 1 <= values <= 10000
  • 最多會對 appendTail 、deleteHead 進行 10000 次調用

解題思路:

  • 棧后進先出,隊列先進先出
  • 雙??梢詫崿F(xiàn)序列倒置:假設有 stack1=[1, 2, 3] 、 stack2=[] ,如果循環(huán)出棧 stack1 并將出棧元素進棧 stack2 ,則循環(huán)結束后, stack1=[] 、 stack2=[3, 2, 1] ,即通過 stack2 實現(xiàn)了 stack1 中元素的倒置
  • 當需要刪除隊首元素時,僅僅需要 stack2 出棧即可;當 stack2 為空時,出隊就需要將 stack1 元素倒置倒 stack2 , stack2 再出隊即可;如果 stack1 也為空,即隊列中沒有元素,返回 -1

代碼實現(xiàn):

  1. const CQueue = function() { 
  2.     this.stack1 = [] 
  3.     this.stack2 = [] 
  4. }; 
  5. CQueue.prototype.appendTail = function(value) { 
  6.     this.stack1.push(value) 
  7. }; 
  8. CQueue.prototype.deleteHead = function() { 
  9.     if(this.stack2.length) { 
  10.         return this.stack2.pop() 
  11.     } 
  12.     if(!this.stack1.length) return -1 
  13.     while(this.stack1.length) { 
  14.         this.stack2.push(this.stack1.pop()) 
  15.     } 
  16.     return this.stack2.pop() 
  17. }; 

復雜度分析:

時間復雜度:appendTail 的時間復雜度為O(1),deleteHead 的時間復雜度為 O(n)

 

空間復雜度:O(n)

 

責任編輯:武曉燕 來源: 三分鐘學前端
相關推薦

2020-10-26 08:19:53

算法隊列

2022-08-11 08:03:43

隊列

2021-03-01 23:31:48

隊列實現(xiàn)棧存儲

2021-11-15 09:53:16

STM32PSPMSP

2021-08-03 08:13:47

數(shù)據(jù)

2019-06-25 10:46:04

Flutter開發(fā)APP

2024-02-02 08:25:34

隊列與棧Python數(shù)據(jù)結構

2010-07-17 00:50:12

batch Telne

2016-03-31 11:28:21

imageView圖片輪播

2021-03-27 11:02:04

JavaScript隊列編程語言

2019-08-08 09:09:20

MySQL硬件Linux

2022-06-17 09:46:51

Chrome 102Chrome瀏覽器

2010-05-27 09:50:18

MySQL導入sql腳

2011-09-07 16:43:38

Qt Widget

2010-07-21 11:32:35

SQL Server日

2010-09-13 16:55:27

DIV橫向排列

2009-06-30 09:37:02

對象比較Java

2025-02-25 09:11:08

2021-10-26 00:23:26

算法高頻元素

2020-11-13 07:16:09

線程互斥鎖死循環(huán)
點贊
收藏

51CTO技術棧公眾號