<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      劍指offer-20、包含min函數的棧

      題?描述

      定義棧的數據結構,請在該類型中實現?個能夠得到棧中所含最?元素的min 函數(時間復雜度為O(1) )。

      此棧包含的?法有:

      • push(value) :將value 壓?棧中
      • pop() :彈出棧頂元素
      • top() :獲取棧頂元素
      • min() :獲取棧中最?元素

      思路及解答

      雙棧法(推薦,實現簡單)

      使用兩個棧:

      1. ?主棧?:存儲所有元素
      2. ?輔助棧?:存儲當前主棧中的最小值

      push ?個元素的時候,都需要push 進datas stack ,但是push 進?mins stack 需要滿?條件:當前的mins stack 是空的,直接放?。或者當前的mins stack 的棧頂元素?于或者等于push 進來的值。

      pop ?個元素的時候,如果棧為空則什么都不操作,如果棧不為空,則判斷datas 的第?個元素是否和mins 的第?個元素相等。如果相等的話那么就需要將mins 和datas pop 出去第?個元素,否則只需要將datas 的第?個元素 pop 出去即可。

      public class Solution {
      	private Stack<Integer> datas = new Stack<>();
      	private Stack<Integer> mins = new Stack<>();
      
      	/?**?
           * 將元素壓入棧中
           * @param value 要壓入的值
           */
      	public void push(int node) {
      		datas.push(node);
      		// 如果輔助棧為空,或新值<=當前最小值,壓入輔助棧
      		if (mins.isEmpty()) {
      			mins.push(node);
      		} else {
      			int min = mins.peek();
      			if (node <= min) {
      				mins.push(node);
      			}
      		}
      	}
      	
      	public void pop() {
      		if (datas.isEmpty()) {
      			return;
      		} else {
      			int value = datas.peek();
      			if (value == mins.peek()) {
      				mins.pop();
      			}
      			datas.pop();
      		}
      	}
      	
      	public int top() {
      		if(datas.isEmpty()){
      			return -1;
      		}
      		return datas.peek();
      	}
      	
      	public int min() {
      		if(mins.isEmpty()){
      			return -1;
      		}
      		return mins.peek();
      	}
      }
      
      • 時間復雜度: O(1)
      • 空間復雜度: O(n) ,借助了輔助棧。

      差值法

      使用一個棧和一個變量minValue

      1. ?棧存儲差值?:存儲元素與當前最小值的差值
      2. ?更新最小值?:當遇到更小值時,先存儲當前差值(負值),再更新最小值
      3. ?恢復前值?:pop時如果發現差值為負,說明此處發生過最小值更新,需要恢復前一個最小值
      public class Solution {
          private Stack<Long> stack = new Stack<>();; // 存儲差值的棧
          private long minValue; // 當前最小值
      
          public void push(int value) {
              if (stack.isEmpty()) {
                  minValue = value;
                  stack.push(0L); // 差值為0
              } else {
                  long diff = (long)value - minValue;
                  stack.push(diff);
                  // 如果差值為負,說明value是新的最小值
                  if (diff < 0) {
                      minValue = value;
                  }
              }
          }
      
          public void pop() {
              if (stack.isEmpty()) {
                  return;
              }
              long diff = stack.pop();
              // 如果差值為負,說明此處更新過最小值,需要恢復前一個最小值
              if (diff < 0) {
                  minValue = minValue - diff;
              }
          }
      
          public int top() {
              if (stack.isEmpty()) {
                 return;
              }
              long diff = stack.peek();
              // 如果差值為負,說明當前棧頂就是最小值
              if (diff < 0) {
                  return (int)minValue;
              } else {
                  return (int)(minValue + diff);
              }
          }
      
          public int min() {
              if (stack.isEmpty()) {
                 return;
              }
              return (int)minValue;
          }
      }
      
      • 時間復雜度?:所有操作仍為O(1)
      • ?空間復雜度?:O(1)額外空間(僅一個變量),但棧存儲的是差值而非原始值

      需要考慮整數溢出問題(使用long存儲差值)

      posted @ 2025-08-12 09:00  程序員Seven  閱讀(19)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 91久久性奴调教国产免费| 亚洲av午夜福利精品一区二区| 国产免费高清69式视频在线观看| 亚洲国产精品久久久天堂麻豆宅男| 欧洲码亚洲码的区别入口| 少妇的丰满3中文字幕| 久久亚洲国产精品五月天| 亚洲国产精品综合久久2007| 国产乱码精品一区二区三上| 久热伊人精品国产中文| 精品无码久久久久久尤物| 熟女人妻aⅴ一区二区三区电影 | 亚洲中文字幕无码一久久区| 国内在线视频一区二区三区| 国产v综合v亚洲欧美久久| 国产精品视频第一第二区| 青青青爽在线视频观看| 重口SM一区二区三区视频| 亚洲顶级裸体av片| 国产成人精品无码一区二区| 国产精品亚洲二区在线播放| 亚洲中文字幕久久精品蜜桃| 黄瓜一区二区三区自拍视频| 亚洲一区二区三区在线观看精品中文 | 国产高颜值不卡一区二区| 国产av一区二区不卡| 日韩V欧美V中文在线| 91老肥熟女九色老女人| 久久青青草原精品国产app| 亚洲欧美电影在线一区二区| 少妇人妻精品一区二区| 国产午夜精品在人线播放| 亚洲爆乳WWW无码专区| 国产成人免费高清激情视频| 亚洲欧洲久久激情久av| 精品婷婷色一区二区三区| 亚洲午夜激情久久加勒比| 南靖县| 亚洲精品一区二区口爆| 国产精品无码a∨麻豆| 国产精品久久香蕉免费播放|