Leetcode 456. 132 Pattern

來源:互聯網
上載者:User

標籤:pattern   地方   src   leetcode   自己實現   變數   過程   code   image   

題目的意思就是給你一個數組 裡面一堆數,你是否能找到這樣三個數,第一個數比第三個數小,第二個數最大。比如 1, 3, 2 或者  4, 9, 5 這種,數字可以不連續在一起,但是要保證順序不變,只要有這麼一組數就可以。

這個題我做了一個小時沒想到比較好的辦法,去看了別人的思路,看懂以後回來自己實現的,不得不說,想法真的優秀。

思路是這樣的,既然是三個數比較,我找到中間那個數就是 2 那個數,再找到一個比2大的, 再找到一個比2 小的,這樣就存在這麼一組數了。那如何能保證順序沒問題呢,從數組的後面遍曆,設定一個臨時變數temp 以及 一個棧,temp 用來儲存 2 這個數,stack裡面 用來儲存 可以成為3 這個數,每次遍曆到一個新的數字curr,先比較這個數有沒有stack[-1]大,如果大的話,把棧裡面所有比 當前數小的 出棧temp = stack.pop(),把當前數進棧。所以temp 就是一個比棧裡小的數了,棧裡存的就是一個較大的數,因為是從後面遍曆且temp是從棧裡出來的,所以順序上也是沒問題的。現在重複上面的過程,直到找到了一個 比temp 小的數,那麼這組數就找到了。

兩個地方注意一下啊

為什麼是while 迴圈出棧 改成if 可以嗎?

可以考慮這麼一組數[2, 4, 2, 3]

第二個temp = stack.pop()這裡 怎麼理解,為什麼最後一個pop的數可以成為 temp,那之前出去的數呢?

還可以考慮這麼一組數[2, 4, 2, 3]

哈哈哈

Leetcode 456. 132 Pattern

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.