如果每次直接遍歷棧獲得最小元素,效率太低,而且時間複雜度也低,可以採用輔助棧,保持最小元素一直在棧頂,這樣獲取最小值就可以直接拿到。
思想:定義乙個輔助棧,如果要插入的元素小於輔助棧棧頂的值則直接入棧,如果不是,則輔助棧插入的是輔助棧棧頂的值(棧中最小元素),出棧的時候,兩個棧一起出棧。
舉個列子
入棧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...