【D32】螺旋矩陣&最小棧&驗證棧序列 (LC 54&155&946)

54. 螺旋矩陣

問題描述

給你一個 m 行 n 列的矩陣 matrix 桥嗤,請按照 順時針螺旋順序 展东,返回矩陣中的所有元素悄但。

解題思路

從外向內(nèi)繞圈圈打印元素锅棕。

  • 注意邊界值的處理


    官方題解圖

代碼實現(xiàn)

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        int rowNum = matrix.length;
        int colNum = matrix[0].length;
        List<Integer> res = new ArrayList<>();

        int left = 0, right = colNum - 1, top = 0, bottom = rowNum - 1;
        while(left <= right && top <= bottom){
            //打印上邊界,包括兩端端點
            for(int i = left; i <= right; i++) {
                res.add(matrix[top][i]);
            }
            //打印左邊界秉宿,只包括下端點
            for(int j = top + 1; j <= bottom; j++){
                res.add(matrix[j][right]);
            }
            
            //處理單行或單列的情況
            if(top == bottom || left == right){
                break;
            }

            //打印下邊界,不包括兩端端點
            for(int i = right - 1; i > left; i--) {
                res.add(matrix[bottom][i]);
            }

            //打印右邊界隆豹,只包括下端點
            for(int j = bottom; j > top; j--){
                res.add(matrix[j][left]);
            }

            left++;
            right--;
            top++;
            bottom--;
        }   
        return res;
    }
}

155. 最小棧

問題描述

設(shè)計一個支持 push ,pop 沐旨,top 操作森逮,并能在常數(shù)時間內(nèi)檢索到最小元素的棧。

push(x) —— 將元素 x 推入棧中磁携。
pop() —— 刪除棧頂?shù)脑亍?br> top() —— 獲取棧頂元素。
getMin() —— 檢索棧中的最小元素良风。

解題思路

引入輔助棧存儲當(dāng)前棧中的最小元素

代碼實現(xiàn)

class MinStack {
    private Deque<Integer> minElementStack;
    private Deque<Integer> stack;

    /** initialize your data structure here. */
    public MinStack() {
        stack = new LinkedList<>();
        minElementStack = new LinkedList<>();
    }
    
    public void push(int x) {
        if(stack.isEmpty() || x <= minElementStack.peek()){
            //向輔助棧中添加元素
            minElementStack.push(x);
        }
        stack.push(x);
    }
    
    public void pop() {
        Integer top = stack.pop();
        //如果彈出元素為當(dāng)前棧中最小值谊迄,則輔助棧棧頂元素也彈出
        if(top.equals(minElementStack.peek())){
            minElementStack.pop();
        }
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return minElementStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

946. 驗證棧序列

問題描述

給定 pushed 和 popped 兩個序列闷供,每個序列中的 值都不重復(fù),只有當(dāng)它們可能是在最初空棧上進行的推入 push 和彈出 pop 操作序列的結(jié)果時统诺,返回 true歪脏;否則,返回 false 粮呢。

解題思路

使用一個輔助棧來模擬出棧婿失,入棧操作。

代碼實現(xiàn)

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
        Deque<Integer> stack = new LinkedList<>();

        int popIndex = 0;
        for(int i = 0 ; i < pushed.length; i++){
            stack.push(pushed[i]);
            while(popIndex < popped.length && !stack.isEmpty() && stack.peek().equals(popped[popIndex])){
                //如果棧頂元素與出棧數(shù)組中的元素相同啄寡,則出棧
                stack.pop();
                popIndex++;
            }
        }
        return stack.isEmpty();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豪硅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挺物,更是在濱河造成了極大的恐慌懒浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件识藤,死亡現(xiàn)場離奇詭異砚著,居然都是意外死亡,警方通過查閱死者的電腦和手機痴昧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門稽穆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赶撰,你說我怎么就攤上這事舌镶。” “怎么了扣囊?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵乎折,是天一觀的道長。 經(jīng)常有香客問我侵歇,道長骂澄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任惕虑,我火速辦了婚禮坟冲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溃蔫。我一直安慰自己健提,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布伟叛。 她就那樣靜靜地躺著私痹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上紊遵,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天账千,我揣著相機與錄音,去河邊找鬼暗膜。 笑死匀奏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的学搜。 我是一名探鬼主播娃善,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瑞佩!你這毒婦竟也來了聚磺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤钉凌,失蹤者是張志新(化名)和其女友劉穎咧最,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體御雕,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡矢沿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酸纲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捣鲸。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闽坡,靈堂內(nèi)的尸體忽然破棺而出栽惶,到底是詐尸還是另有隱情,我是刑警寧澤疾嗅,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布外厂,位于F島的核電站,受9級特大地震影響代承,放射性物質(zhì)發(fā)生泄漏汁蝶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一论悴、第九天 我趴在偏房一處隱蔽的房頂上張望掖棉。 院中可真熱鬧,春花似錦膀估、人聲如沸幔亥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帕棉。三九已至针肥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笤昨,已是汗流浹背祖驱。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工握恳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞒窒,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓乡洼,卻偏偏與公主長得像崇裁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子束昵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容