天天看點

LeetCode 162. Find Peak Element

作者:Grey

原文位址: LeetCode 162. Find Peak Element

題目連結

假設數組長度為<code>N</code>,首先判斷<code>0</code>号位置的數和<code>N-1</code>位置的數是不是峰值位置。

<code>0</code>号位置隻需要和<code>1</code>号位置比較,如果<code>0</code>号位置大,<code>0</code>号位置就是峰值位置。

<code>N-1</code>号位置隻需要和<code>N-2</code>号位置比較,如果<code>N-1</code>号位置大,<code>N-1</code>号位置就是峰值位置。

如果<code>0</code>号位置和<code>N-1</code>在上輪比較中均是最小值,那麼數組的樣子必然是如下情況:

LeetCode 162. Find Peak Element

<code>[0..1]</code>區間内是增長, <code>[N-2...N-1]</code>區間内是下降

那麼峰值位置必在<code>[1...N-2]</code>之間出現

此時可以通過二分來找峰值位置,先來到中點位置,假設為<code>mid</code>,如果:

則<code>mid</code>位置即峰值位置

否則,有如下兩種情況:

情況一,趨勢是:

LeetCode 162. Find Peak Element

則在<code>[1...(mid-1)]</code>區間内繼續上述二分。

情況二,趨勢是:

LeetCode 162. Find Peak Element

則在<code>[(mid+1)...(N-2)]</code>區間内繼續上述二分。

算法和資料結構筆記