天天看點

劍指offer——6.旋轉數組的最小數字 代碼

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

代碼

解法1

思路:直接将數組按從小到大排序,傳回第一個元素即可。

function minNumberInRotateArray(rotateArray)
{
    // write code here
    rotateArray.sort(function(a,b){
        if(a<b) return -;
        else return ;
    });
    return rotateArray[];
}
           

解法2

思路:采用二分法解答這個問題,需要考慮3種情況

  1. 數組為空
  2. 部分旋轉,例如由(1,2,3,4,5)旋轉為(3,4,5,1,2),此時隻需要周遊數組,找到目前數比前面的數小的數即可。
  3. 完全旋轉,例如由(1,2,3,4,5)旋轉為(1,2,3,4,5),此時第一個數最小。
function minNumberInRotateArray(rotateArray)
{
  if(rotateArray.length===){
        return ;
    }
    if(rotateArray.length===){
        return rotateArray[];
    }    
    var index=parseInt(Math.floor((rotateArray.length)/));
    var left=rotateArray.slice(,index);
    var right=rotateArray.slice(index);
    var recuArray;//rotateArray[index-]>=rotateArray[0]?right:left;
    if(rotateArray[index-]<rotateArray[]){
        recuArray=left;
    }else {
        //是否還是旋轉數組
        if(right[]<=right[right.length-]) return right[];
        else recuArray=right;
    }
    return minNumberInRotateArray(recuArray);
}