Find Minimum in Rotated Sorted Array

Find Minimum in Rotated Sorted Array.png

===================== 解題思路 =====================

一樣用二分法 先求出 mid = left + (right - left) / 2
考慮兩種情形:

  1. mid 的儲存值比 vector 尾端的數(shù)還大 代表 mid 以及 mid 之前的數(shù)都是 rotate 過的跑到前面 不可能是原本的頭(最小值) 所以只檢查 mid 之後的數(shù) ( mid ~ right )
  2. mid 的儲存值比 vector 尾端的數(shù)小 相反的只檢查 mid 前面的數(shù) (left ~ mid)

接著就是等 while ( left + 1 < right ) 結(jié)束後 檢查 left 跟 right 的數(shù)值 誰小就是答案

===================== C++ code ====================

<pre><code>
class Solution {

public:

/**
 * @param num: a rotated sorted array
 * @return: the minimum number in the array
 */
int findMin(vector<int> &num) {
    if(num.size() == 0) return -1;
    int left = 0, right = num.size() -1, end = num.size() -1;
    while(left + 1 < right)
    {
        int mid = left + (right - left) / 2;
        if(num[mid] > num[end]) left = mid;
        else right = mid;
    }
    return num[right] > num[left]? num[left] : num[right];
}

};
<code><pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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