面試題8:旋轉數組的最小數字

劍指Offer面試題8:旋轉數組的最小數字(JS實現)

題目描述: 題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個遞增排序數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1

//indexMin初始化爲index1是爲了防止將排序數組的前面0個元素搬到最後面
//即排序數組本身
    function Min(arr) {
        var len = arr.length;
        if(arr === null || len < 0) {
            return null;
        }else {
            var index1 = 0,
                index2 = len - 1,
                indexMin = index1;
            while(arr[index1] >= arr[index2]) {
                if(index2 - index1 === 1) {
                    indexMin = index2;
                    break;
                }
                indexMin = Math.floor((index1+index2) / 2);

                //如果index1,index2,indexMin指向的數字相等,就只能順序查找
                if(arr[index1] === arr[indexMin] && arr[index2]=== arr[indexMin]) {
                    return MinInorder(arr, index1, index2);
                }

                if(arr[indexMin] >= arr[index1]) {
                    index1 = indexMin
                } else {
                    index2 = indexMin;
                }
            }

            return arr[indexMin];
        }
    }

    function MinInorder(arr, index1, index2) {
        var result = arr[index1];
        for(var i = index1; i < index2; i++) {
            if(arr[i] < result) {
                result = arr[i];
            }
        }
        return result;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章