日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))

發布時間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述:

我們知道平凡的棧有幾個操作:

push(value) 將 value 壓入棧 pop() 將棧頂元素彈出, 并返回這個彈出的元素。

現在我們想要在平凡棧的基礎上實現以下幾個操作:

push(val) 將 val 壓入棧;
pop() 將棧頂元素彈出;
min() 返回棧中元素的最小值。

輸入格式:

第一行輸入一個N( 0=<N<=1000000),代表有N行操作。 接下來N行每行有一個操作,題目保證操作不會越界.

輸出格式:

輸出每次查詢min()時的結果,pop()不用輸出

輸入樣例:

6
push 1
min
push 2
min
push 3
min

輸出樣例:

1
1
1

分析:

全網首發啊有木有-_-||,這道PTA題其實是一道經典面試題的改編版,本題要求輸入小于100W種操作,時間限制在600ms,這就要求我們只能用O(n)或O(nlogn)去實現,毋庸置疑遍歷n種操作的循環必須有,所以就要求最小值時的復雜度為o(1),由此引出一個經典思想:空間換時間。下面給出代碼:

代碼:

#include<iostream> #include<stdio.h> int a[1000005], b[1000005]; //a是存放所有值的,b是存放小值的 ,從1開始存放 int main() {int num1 = 0, num2 = 0; //a、b數組的計數器 ,0代表無存放 int n;scanf("%d", &n);while(n--) {char s[5];scanf("%s", &s);if(s[1] == 'u') {int x;scanf("%d", &x);if(!num1) {a[++num1] = x; b[++num2] = x;} else {a[++num1] = x;if(x <= b[num2]) b[++num2] = x;}} else if(s[1] == 'o') {if(a[num1] == b[num2]) { a[num1--] = 0; b[num2--] = 0; }else a[num1--] = 0;} else printf("%d\n", b[num2]);} return 0; }

二更:
有評論反應代碼無法運行, 已做調整。 無法運行的原因是:
代碼中a,b數組的規模都開到了100w, 而規模50w以上的數組就要定義為全局變量, 否則會報錯。

收獲:

1、空間換時間的思想
2、C語言比C++要高效一些


每日分享:

平時在做題的時候,一定要尋找最優解,而不是 ac 了就不管了,應該多看看別人的解法。

總結

以上是生活随笔為你收集整理的PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。