基礎資料結構之單調棧

2021-10-07 01:36:56 字數 1237 閱讀 2683

題目描述

給定乙個長度為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)

#include

using

namespace std;

const

int n=

100010

;int s[n]

,tt;

//s為模擬棧, tt為棧頂

int n;

intmain()

return0;

}

演算法2

(stl) o(n)

#include

#include

#include

using

namespace std;

const

int n=

100010

;int n;

int a[n]

;stack<

int> stk;

intmain()

for(

int i =

0; i < n; i ++

) cout << a[i]

<<

" ";

cout << endl;

return0;

}

總結

單調棧的常見模型:

找出每個數左邊理它最近的比它大 / 小的數

int tt =0;

for(

int i =

1; i <= n; i ++

)

資料結構之單調棧

dev.c 資料結構之單調棧 從數學上來講,函式的單調性也可以叫做函式的增減性。當函式f x 的自變數在其定義區間內增大 或減小 時,函式值f x 也隨著增大 或減小 則稱該函式為在該區間上具有單調性。換句話來說,函式的單調性就是在區間內的自變數只增或只減。我們說,數學中函式在一段區間內自變數只增或...

資料結構 單調棧

上班無事,刷力扣發現了個新名詞 單調棧 題目 496.下乙個更大元素 i 名字上就聽的出來,單調棧中存放的資料應該是有序的,所以單調棧也分為單調遞增棧和單調遞減棧 單調遞增棧 棧中資料出棧的序列為單調遞增序列 單調遞減棧 棧中資料出棧的序列為單調遞減序列 ps 這裡一定要注意所說的遞增遞減指的是出棧...

資料結構 單調棧

這是筆者的第一篇部落格,由於筆者自身水平的限制。用詞可能不夠準確,句子不太通順,水平可能也不太行,敬請指出,感激不盡!我們都知道棧 stack 是一種先入後出的資料結構,而單調棧建立在棧的基礎上,它區別於普通的棧的特殊之處在於 棧中的元素一直保持著單調遞增 單調遞減的關係 比如單調遞增棧中的元素自棧...