日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode剑指offer算法备战春招-包含min函数的栈

發布時間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode剑指offer算法备战春招-包含min函数的栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

劍指 Offer 30. 包含min函數的棧

定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間復雜度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.

提示:

各函數的調用總次數不超過 20000 次

思路:

定義一個輔助棧,最小的永遠是棧頂,加入正常棧的時候維護這個輔助棧

  • 加入:
  • ①如果輔助棧為空就直接加入||如果輔助棧頂元素大于現在要加入的元素就加入輔助棧
  • ②無論何時,A都是正常的棧,正常入棧
  • 出棧:
  • 如果正常出棧的元素是輔助棧的棧頂,輔助棧也彈出
  • min:
  • 輔助棧的棧頂就是最小的

知識點

peek與poop
Stack.peek() 返回棧頂元素。
Stack.pop() 返回棧頂元素,并在棧中刪除它。

Integer.equals()與“==”

注意這里的代碼的pop()處如果用"=="取代equals就會出錯,這是因為:

  • “==”兩邊都是包裝類型時,會直接比較引用地址(IntegerCache除外);兩邊都是基本類型比較值;兩邊是不同類型就自動拆箱。
  • equals不能比較基本類型,比較包裝類型會先比較是否為同類型,之后比較值是否相同;參數為值類型會自動裝箱成包裝類型。
  • JAVA的Integer有IntegerCache,他會緩存[-128-127]之間的對象,也就是說新創建的對象的值在[-128-127]之間會檢查是否有已存在的[-128~127],如果有就直接調用,否則才會產生新對象。
  • 也就是說,如果連續新建兩個相同值的Integer,如果值的大小在[-128~127],他們兩個用"=="就是相等的,如果在這個范圍之外,他們就不是同一個地址,就是不同的。
  • ==和equals的不同:https://www.cnblogs.com/mrhgw/p/10449391.html

    import java.util.Stack;/*** 包含min函數的棧* 定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間復雜度都是 O(1)。* 思路:定義一個輔助棧,最小的永遠是棧頂,加入正常棧的時候維護這個輔助棧* 加入:* ①如果輔助棧為空就直接加入||如果輔助棧頂元素大于現在要加入的元素就加入輔助棧* ②無論何時,A都是正常的棧,正常入棧* 出棧:* 如果正常出棧的元素是輔助棧的棧頂,輔助棧也彈出* min:* 輔助棧的棧頂就是最小的*/ class MinStack {Stack<Integer> A,B;/** initialize your data structure here. */public MinStack() {A=new Stack<>();B=new Stack<>();}//入棧public void push(int x) {A.push(x);//A是正常棧,都正常加入if (B.empty()||B.peek()>=x){//B是輔助棧,存儲最小值B.push(x);}}public void pop() {//如果當前最小值是B的棧頂,A和B棧都同時出棧if (A.pop().equals(B.peek())){B.pop();}}public int top() {return A.peek();}public int min() {return B.peek();} }

    總結

    以上是生活随笔為你收集整理的LeetCode剑指offer算法备战春招-包含min函数的栈的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。