手寫棧 STL AcWing 830 單調棧

2021-10-12 21:07:44 字數 916 閱讀 3821

給定乙個長度為n的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出-1。

[輸入格式]

第一行包含整數n,表示數列長度。

第二行包含n個整數,表示整數數列。

[輸出格式]

共一行,包含n個整數,其中第i個數表示第i個數的左邊第乙個比它小的數,如果不存在則輸出-1。

[資料範圍]

1≤n≤105

1≤數列中元素≤109

[輸入樣例]

53 4 2 7 5

[輸出樣例]:

-1 3 -1 2 2

打暴力顯然超時,但通過建立乙個單調下降的棧,棧頂為最優,時間複雜度降低到o(n)。

stl **如下

棧:

s.empty()//如果棧為空返回true,否則返回false

s.size()//返回棧中元素的個數

s.pop()//刪除棧頂元素但不返回其值

s.top()//返回棧頂的元素,但不刪除該元素

s.push(x)//在棧頂壓入新元素 ,引數x為要壓入的元素

#include

//yjyj

using

namespace std;

stack <

int>a;

int n;

intmain()

return0;

}

手寫同理

#include

//yjyj

using

namespace std;

int a[

10008];

int n,top;

intmain()

return0;

}

演算法練習 830 單調棧

830.單調棧 給定乙個長度為n的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入格式 第一行包含整數n,表示數列長度。第二行包含n個整數,表示整數數列。輸出格式 共一行,包含n個整數,其中第i個數表示第i個數的左邊第乙個比它小的數,如果不存在則輸出 1。資料範圍 1 n 105...

漢諾塔 手寫出棧壓棧過程實現

實現 1 include23 函式的形參a b c不一定代表的是a b c柱子,遞迴傳參的時候會變化!4void hanoit int n,char a,char b,charc 9 else19 2021 intmain view code 主函式傳參hanoit 2,a b c 壓棧1。n 1,...

手寫數字識別的全棧嘗試

心血來潮想進行一次full stack嘗試,以前一直做單機的開發,沒有做過web service。web service比單機應用會更加容易傳播,不會對使用者有太多的要求。之前就有考慮過前端和後台通訊的問題,但一直沒有真正去實現過,這次還是遇到了一些問題。整個專案的邏輯是,使用者在前端網頁手寫乙個數...