演算法題: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();
}
}
相關文章
- Java實現:排序演算法--時間複雜度為O(n² )Java排序演算法時間複雜度
- 時間複雜度O(n)和空間複雜度時間複雜度
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- 時間複雜度為 O(nlogn) 的排序演算法時間複雜度排序演算法
- 時間複雜度為O(nlogn)的排序演算法時間複雜度排序演算法
- 時間複雜度為 O (n^2) 的排序演算法時間複雜度排序演算法
- 時間複雜度為 O(n^2) 的排序演算法時間複雜度排序演算法
- Leetcode 234. 迴文連結串列 快慢指標+連結串列逆序實現O(n)時間複雜度且O(1)空間複雜度LeetCode指標時間複雜度
- 演算法的時間複雜度演算法時間複雜度
- 122 演算法的時間複雜度和空間複雜度詳解演算法時間複雜度
- 排序演算法:堆排序的實現和時間複雜度分析排序演算法時間複雜度
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 演算法(一)時間複雜度演算法時間複雜度
- 演算法分析__時間複雜度演算法時間複雜度
- 卷演算法——時間複雜度演算法時間複雜度
- 解惑3:時間頻度,演算法時間複雜度演算法時間複雜度
- 快速排序平均時間複雜度O(nlogn)的推導排序時間複雜度
- O1空間複雜度實現陣列迴圈右移_LeetCode189複雜度陣列LeetCode
- 遞迴演算法的時間複雜度遞迴演算法時間複雜度
- PHP 演算法基礎----時間複雜度和空間複雜度(轉載)PHP演算法時間複雜度
- 1. 時間複雜度和空間複雜度 (7 天掌握演算法面試必考知識點)時間複雜度演算法面試
- 演算法與資料結構--空間複雜度O(1)遍歷樹演算法資料結構複雜度
- 【基礎】演算法的時間複雜度分析演算法時間複雜度
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 說說你對演算法中時間複雜度,空間複雜度的理解?如何計算?演算法時間複雜度
- 判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)時間複雜度
- 演算法的空間複雜度演算法複雜度
- 時間複雜度的計算時間複雜度
- 一文講透演算法中的時間複雜度和空間複雜度計算方式演算法時間複雜度
- 我們常說的演算法時間複雜度和空間複雜度到底是什麼?演算法時間複雜度
- 圖解時間複雜度圖解時間複雜度
- 淺談時間複雜度時間複雜度
- dfs時間複雜度分析時間複雜度
- 時間複雜度(詳解)時間複雜度
- O(1) 時間插入、刪除和獲取隨機元素,允許元素重複隨機
- 演算法分析__時間複雜度的五個記號演算法時間複雜度