求棧的最小元素或者佇列的最大元素

2021-10-08 18:15:57 字數 913 閱讀 1147

如果每次直接遍歷棧獲得最小元素,效率太低,而且時間複雜度也低,可以採用輔助棧,保持最小元素一直在棧頂,這樣獲取最小值就可以直接拿到。

思想:定義乙個輔助棧,如果要插入的元素小於輔助棧棧頂的值則直接入棧,如果不是,則輔助棧插入的是輔助棧棧頂的值(棧中最小元素),出棧的時候,兩個棧一起出棧。

舉個列子

入棧3 4 1 3 2

輔助棧3 3 1 1 1

class solution 

if(value>fu.top())

else

fu.push(value);

s.push(value);

}void pop()

}int top()

int min()

};

與上面的題相似,佇列是先進先出,借助單調佇列deque,將最大的元素一直儲存在單調佇列的頭部,如果要push的資料比單調佇列隊尾的大,則一直刪除隊尾,pop時,如果刪除的是單調佇列的頭部(最大)則兩個佇列都pop。

舉例:入隊資料:2 4 1 5 9 6

每一次入隊時,單調佇列中的資料

第一次:2

第二次:4(因為4比2大,所以刪除)

第三次: 4 1

第四次: 5(從隊尾開始比5小的全部刪除)

第五次: 9

第六次: 9 6

class maxqueue 

int max_value()

void push_back(int value) {

while(d.size()!=0&&d.back()max_value();

* obj->push_back(value);

* int param_3 = obj->pop_front();

*/

求棧的最小元素

2.設計包含min函式的棧。定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 思路 我看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最...

求棧中的最小元素

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min push以及pop的時間複雜度都是o 1 主要難點 將當前最小的元素min出棧之後,如何快速找到下乙個最小的元素?因此需要乙個輔助棧,每次push乙個新元素的時候,同時將最小元素push到輔助棧中 每次pop乙個元素出棧...

1 4 找到最大或者最小的N個元素

如果只是簡單的想找到最小或最大的元素 n 1時 使用min和max最快 如果n和集合的本身大小差不多,通常更快的方法是先對集合進行排序,然後做切片操作,例如sorted items n 或者sorted items n 如果我們想在某個集合中找到最大或者最小的n個元素,使用heapq中的nlarge...