《劍指offer》— JavaScript(6)旋轉數(shù)組的最小數(shù)字

旋轉數(shù)組的最小數(shù)字

題目描述

把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉。
  輸入一個非遞減排序的數(shù)組的一個旋轉,輸出旋轉數(shù)組的最小元素。例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數(shù)組的最小值為1。
  NOTE:給出的所有元素都大于0,若數(shù)組大小為0,請返回0。


實現(xiàn)代碼

function minNumberInRotateArray(rotateArray)
{
    var len = rotateArray.length
    if (len == 0){
        return 0
    }else{ 
        var low = 0;
        var high = len-1;
        while(low<high){
            var mid = low + Math.floor((high - low) / 2);        
            if(rotateArray[mid] > rotateArray[high]){
                low = mid + 1;
            }else if(rotateArray[mid] == rotateArray[high]){
                high = high - 1;
            }else{
                high = mid;
            }   
        }
        return rotateArray[low];
        }
    }

思路

旋轉之后的數(shù)組實際上可以劃分成兩個有序的子數(shù)組:前面子數(shù)組的大小都大于后面子數(shù)組中的元素,實際上最小的元素就是兩個子數(shù)組的分界線。

  1. 我們用兩個指針low和high分別指向數(shù)組的第一個元素和最后一個元素。按照題目的旋轉的規(guī)則,第一個元素應該是大于等于最后一個元素的;但是如果不是旋轉,第一個元素肯定小于或等于最后一個元素。

  2. 找到數(shù)組的中間元素。中間元素大于最后一個元素,則中間元素位于前面的遞增子數(shù)組,此時最小元素位于中間元素的后面。我們可以讓第一個指針low指向中間元素。

  3. 中間元素小于最后一個元素,則中間元素位于后面的遞增子數(shù)組,此時最小元素位于中間元素的前面。我們可以讓第二個指針high指向中間元素。

  4. 中間元素等于最后一個元素,則將第二個指針向前移,然后繼續(xù)比較。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 旋轉數(shù)組的最小數(shù)字 題目 給定一個遞增的旋轉數(shù)組A,返回旋轉數(shù)組中的最小值。旋轉數(shù)組:給定一個已排序的數(shù)組,假設為...
    藍雪冬荷閱讀 503評論 0 0
  • 題目描述:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉。 輸入一個非遞減排序的數(shù)組的一個旋轉,...
    levinhax閱讀 1,067評論 0 0
  • 旋轉數(shù)組的最小數(shù)字 前提摘要 關鍵找出規(guī)律:當start指針和end指針分別指向兩個相鄰元素時,end指針指向的元...
    ericlll閱讀 324評論 0 0
  • 劍指 offer 在一個二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成...
    faremax閱讀 2,323評論 0 7
  • 每次走到一個陌生的地方 就覺得自己得到了一些 那些叫做記憶 每次走到一個熟悉的地方 就覺得自己失去了一些 那這叫做回憶
    王小韋閱讀 221評論 0 0

友情鏈接更多精彩內(nèi)容