35--用兩個棧實現隊列

1.問題描述

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

示例 1:
輸入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
輸出:[null,null,3,-1]

示例 2:
輸入:[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
輸出:[null,-1,null,null,5,2]

2.解題思路

成員變量:維護兩個棧 stack1 和 stack2,其中 stack1 支持插入操作,stack2 支持刪除操作
構造方法:初始化 stack1 和 stack2 為空
插入元素:插入元素對應方法 appendTail,對應stack1 直接插入元素
刪除元素:刪除元素對應方法 deleteHead

  • 如果 stack2 為空,則將 stack1 里的所有元素彈出插入到 stack2 里
  • 如果 stack2 仍為空,則返回 -1,否則從 stack2 彈出一個元素并返回

時間復雜度:對于插入和刪除操作,時間復雜度均為 O(1)。插入不多說,對于刪除操作,雖然看起來是 O(n)的時間復雜度,但是仔細考慮下每個元素只會「至多被插入和彈出 stack2 一次」,因此均攤下來每個元素被刪除的時間復雜度仍為 O(1)。

空間復雜度:O(n)。需要使用兩個棧存儲已有的元素。

class CQueue {private Stack<Integer> stack1;private Stack<Integer> stack2;public CQueue() {stack1 = new Stack<Integer>();stack2 = new Stack<Integer>();}public void appendTail(int value) {stack1.push(value);}public int deleteHead() {if (stack2.isEmpty()){while (!stack1.isEmpty()){stack2.push(stack1.pop());}}if (stack2.isEmpty()){return -1;}else{int item = stack2.pop();return item;}}
}/*** Your CQueue object will be instantiated and called as such:* CQueue obj = new CQueue();* obj.appendTail(value);* int param_2 = obj.deleteHead();*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何open一個新tab頁面

打開新tab頁的兩種方式 1 a標簽 function openwin(url) {var a document.createElement("a");a.setAttribute("href", url);a.setAttribute("target", "_blank");a.setAttribute("id", "camnpr");document.body.…

Linux中打開文件管理器的命令

在Mac中&#xff0c;我們可以使用open命令&#xff0c;在終端打開指定目錄下的文件管理器&#xff0c;在Linux中&#xff0c;同樣可以使用類似的命令&#xff1a;nautilus。 轉載于:https://www.cnblogs.com/chaoguo1234/p/9446106.html

final類與方法

final類---不可被繼承。 final方法---不可被覆蓋。

【Visual C++】一些開發心得與調試技巧

自己平時收集的一些技巧與心得&#xff0c;這里分享出來&#xff0c;普及一下知識。 1.如何在Release狀態下進行調試   Project->Setting>ProjectSetting對話框&#xff0c;選擇Release狀態。C/C標簽中的Category選General&#xff0c;Optimizations選Disable(Debug)&a…

36--斐波那契數列

1. 問題描述 寫一個函數&#xff0c;輸入n&#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;數列的第 n 項。斐波那契數列的定義如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契數列由 0 和 1 開始&#xff0c;之后的斐波那契數…

lineNumber: 1; columnNumber: 1; 前言中不允許有內容

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我是在xml配置文件中引用別的配置文件&#xff0c;本來是這樣寫的 <import resource"spring-mybatis.xml" /> 就報這…

idea輸入法候選區不跟隨光標

環境&#xff1a; win10 idea 2017.04 搜狗8.6 問題&#xff1a; idea編輯區輸入法候選區不跟隨光標 解決&#xff1a; 輸入法改成必應輸入法 不行的話不用你動手 我自砸蛋蛋。&#xff08;保命狗頭。。&#xff09; 轉載于:https://www.cnblogs.com/yadongliang/p/9079367.htm…

C# 反射 (Reflect)

# C# 反射 &#xff08;Reflect&#xff09; 1.基本內容 我們可以使用反射動態地創建類型的實例&#xff0c;將類型綁定到現有對象&#xff0c;或從現有對象中獲取類型。然后&#xff0c;可以調用類型的方法或訪問其字段和屬性。 最基本的調用&#xff1a; Assembly assembly …

jsp中的%@ ...%

主要用來提供整個JSP 網頁相關的信息&#xff0c;并且用來設定JSP網頁的相關屬性

37--計算一個字符串中每個字符出現次數

1.問題描述 需求&#xff1a;計算一個字符串中每個字符出現次數。 2.解題思路 獲取一個字符串對象&#xff1b;創建一個Map集合&#xff0c;鍵代表字符&#xff0c;值代表次數&#xff1b;遍歷字符串得到每個字符&#xff1b;判斷Map中是否有該鍵&#xff1b;如果沒有&#…

oracle thin和oci 區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Features of Oracle JDBC Drivers&#xff1a; 1.JDBC Oci 此驅動類似于傳統的ODBC 驅動。因為它需要Oracle Call Interface and Net8&…

從拿到班車手冊.xls到搜索附近班車地點

起因 七月份要去某廠報道了&#xff0c;異地租房的時候發現想租一個有公司班車的地方&#xff0c;卻不知道哪里有班車。輾轉流傳出班車手冊后發現搜索實在是太不方便了&#xff0c;于是有了一個主義&#xff0c;想做一個可以搜索房子地址&#xff0c;找出附近班車點&#xff08…

2018.08.09洛谷P3959 寶藏(隨機化貪心)

傳送門 回想起了自己賽場上亂搜的20分。 好吧現在也就是寫了一個隨機化貪心就水過去了&#xff0c;不得不說隨機化貪心大法好。 代碼&#xff1a; #include<bits/stdc.h> using namespace std; inline int read(){int ans0;char chgetchar();while(!isdigit(ch))chget…

AWT和Swing

AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫&#xff0c;這個工具包提供了一套與本地圖形界面進行交互的接口。AWT 中的圖形函數與操作系統所提供的圖形函數之間有著一一對應的關系&#xff0c;我們把它稱為peers。 也就是說&#xff0c;當我們利用 AWT 來構件圖形用…

解決 : Apache Tomcat/8.0.0-RC1 - Error report ... HTTP Status 404

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.報錯&#xff1a; Apache Tomcat/8.0.0-RC1 - Error report HTTP Status 404 - /richer/getOnLineRicherCount The requested resour…

py 5.24

#面向對象 #類&#xff1a;模子。Person&#xff0c;不具體。 #實例/對象&#xff1a;依托于類產生的具體的帶有屬性的。alex #實例化&#xff1a;產生對象的過程。 alex Person() #類&#xff1a; #分為靜態屬性&#xff08;一般的變量&#xff09;。動態屬性(函數&#xff0…

多線程原理實例應用詳解

從單進程單線程到多進程多線程是操作系統發展的一種必然趨勢&#xff0c;當年的DOS系統屬于單任務操作系統&#xff0c;最優秀的程序員也只能通過駐留內存的方式實現所謂的"多任務"&#xff0c;而如今的Win32操作系統卻可以一邊聽音樂&#xff0c;一邊編程&#xff0…

git中使用fork

在git中使用fork相當于你在原項目的主分支上又建立了一個分支&#xff0c;你可以在該分支上任意修改。如果想將你的修改合并到原項目中時&#xff0c;可以pull request&#xff0c;這樣原項目的作者如果認同你的修改&#xff0c;就可以將你修改的東西合并到原項目的主分支上去。…

一、【Collection、泛型】

主要內容 Collection集合迭代器增強for泛型 教學目標 能夠說出集合與數組的區別 說出Collection集合的常用功能 能夠使用迭代器對集合進行取元素 能夠說出集合的使用細節 能夠使用集合存儲自定義類型 能夠使用foreach循環遍歷集合 能夠使用泛型定義集合對象 能夠理解泛型上下…

字符裝換

2019獨角獸企業重金招聘Python工程師標準>>> 字母大小寫轉換 a →A char toUpperCase( char ch){ if((ch >a) && (ch <z)){ return (char)(ch - 32); // 主要 這里(char)是必要的&#xff0c;因為char -32是返回的數值&#xff0c;必須轉換成對應的字…