1. 程式人生 > >1.給棧新增一個獲取最小值的方法(元素為Integer型),要求時間複雜度為O(1)

1.給棧新增一個獲取最小值的方法(元素為Integer型),要求時間複雜度為O(1)

分析:在資料結構與演算法中,當要求時間複雜度最小時基本都是要犧牲空間複雜度。棧是先進後出,此處要求用棧實現一個獲取最小值的方法且時間複雜度為O(1),首先考慮的方向就是再借助一個棧來實現,這個棧主要用來儲存最小值序列(這個地方可以思考一下為什麼不能用一個變數來儲存最小值)。

下面直接附上程式碼:

  

public class StackMin{
    Stack<Integer> stackDate=new Stack<>();//一個普通棧,存入進入棧的元素
    Stack<Integer> stackMin=new Stack<>();//存入最小值序列
    
public void push(Integer num){ stackDate.push(num); if(stackMin.isEmpty()){ stackMin.push(num); }else{ if(num<stackMin.peek()){ stackMin.push(num); }else{ stackMin.push(stackMin.peek()); } } }
public Integer pop(){ Integer data=stackDate.pop(); if(data==stackMin.peek()){ stackMin.pop(); } return data; } public Integer getMin(){ return stackMin.peek(); } }