演算法題:O(1)時間複雜度實現獲取棧的最大值、最小值
問題描述
實現O(1)獲取最大最小值的棧
問題:定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的getMin函式,getMax函式。在該棧中,呼叫getMin、getMax、push及pop的時間複雜度都是O(1).
思路
定義一個minStack輔助棧每次記住入棧stack的最小值,即:將資料分別入棧stack和minStack,當入棧minStack的時候,與棧頂元素比較大小,若小於棧頂元素,則入棧成為新的棧頂元素,若大於棧頂元素,則入棧原先的棧頂元素。
getMax的思路同上。
程式碼
import java.util.Stack;
/**
* 實現O(1)獲取最大最小值的棧
*/
public class NewStack{
Stack<Integer> stack = new Stack<>();
Stack<Integer> maxStack = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void Push(int e){
stack.push(e);
if (minStack.empty() || e < minStack.peek()){
minStack.push(e);
}else if (e > minStack.peek()){
minStack.push(minStack.peek());
}
if (maxStack.empty() || e > maxStack.peek()){
maxStack.push(e);
}else if (e < maxStack.peek()){
maxStack.push(maxStack.peek());
}
}
//pop時要注意棧是否為空
public int Pop(){
if (!stack.empty()&&!maxStack.empty()&&!minStack.empty()){
int e = stack.pop();
minStack.pop();
maxStack.pop();
return e;
}
else {
System.out.println("棧為空!");
return 0;
}
}
public int getMax(){
return maxStack.peek();
}
public int getMin(){
return minStack.peek();
}
}
相關文章
- 【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)演算法函式時間複雜度
- Java實現:排序演算法--時間複雜度為O(n² )Java排序演算法時間複雜度
- 時間複雜度O(n)和空間複雜度時間複雜度
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- 複雜度為 O(1) 的「最不常用」快取演算法的 Python 實現複雜度快取演算法Python
- 時間複雜度為O(nlogn)的排序演算法時間複雜度排序演算法
- 時間複雜度為 O (n^2) 的排序演算法時間複雜度排序演算法
- 時間複雜度為 O(nlogn) 的排序演算法時間複雜度排序演算法
- 時間複雜度為 O(n^2) 的排序演算法時間複雜度排序演算法
- 演算法的時間複雜度演算法時間複雜度
- 一道看上去很嚇人的演算法面試題:如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)演算法面試題排序時間複雜度
- Leetcode 234. 迴文連結串列 快慢指標+連結串列逆序實現O(n)時間複雜度且O(1)空間複雜度LeetCode指標時間複雜度
- 【演算法資料結構Java實現】時間複雜度為O(n)的最大和序列演算法資料結構Java時間複雜度
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 正規表示式時間複雜度O(n)時間複雜度
- 排序演算法:堆排序的實現和時間複雜度分析排序演算法時間複雜度
- 演算法分析__時間複雜度演算法時間複雜度
- 演算法(一)時間複雜度演算法時間複雜度
- 卷演算法——時間複雜度演算法時間複雜度
- 解惑3:時間頻度,演算法時間複雜度演算法時間複雜度
- 122 演算法的時間複雜度和空間複雜度詳解演算法時間複雜度
- 遞迴演算法的時間複雜度遞迴演算法時間複雜度
- PHP 演算法基礎----時間複雜度和空間複雜度(轉載)PHP演算法時間複雜度
- 時間複雜度和空間複雜度 順序時間複雜度
- 1. 時間複雜度和空間複雜度 (7 天掌握演算法面試必考知識點)時間複雜度演算法面試
- 快速排序平均時間複雜度O(nlogn)的推導排序時間複雜度
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 【基礎】演算法的時間複雜度分析演算法時間複雜度
- 常用的排序演算法和時間複雜度排序演算法時間複雜度
- 演算法與資料結構--空間複雜度O(1)遍歷樹演算法資料結構複雜度
- 關於計算時間複雜度和空間複雜度時間複雜度
- 【資料結構】-時間複雜度和空間複雜度資料結構時間複雜度
- 時間複雜度的計算時間複雜度
- 判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)時間複雜度
- 演算法的空間複雜度演算法複雜度
- 我們常說的演算法時間複雜度和空間複雜度到底是什麼?演算法時間複雜度