簡體   English   中英

在排序的旋轉數組中查找最小的元素

[英]Find smallest element in a sorted rotated array

當元素位於數組的中間並且元素位於數組的開頭時,我的功能是按字母順序在旋轉的排序數組中查找最低的元素,似乎可以正常工作。 我無法弄清楚的是,當元素位於數組的末尾時如何使代碼工作。 “安娜”中的最小元素。 這是我的代碼

function sorted_array(arr){
        var first = 0;
        var middle = arr.length/2;
        var last = arr.length-1;

    while(true){
        if(arr[middle-1] > arr[middle] && arr[middle+1] > arr[middle] || middle === first
            || middle == last){
            return arr[middle];
        }
        if(arr[middle] > arr[last] ){
            first = middle;
            middle = Math.floor((middle + last)/2);
        } else{
            last = middle;
            middle = Math.floor((first + middle)/2);
        }
    }
}


var arr = [  "Celeste",
 "Elon", "Giggli", "Jay", "Mavis", "Phoebe",  "Thunder", "Anna"];
console.log(sorted_array(arr));

當您移動middle指針時,您需要將其向上舍入,例如,在搜索數組后半部分的部分中, (middle + left + 1)/2 否則,您將永遠無法到達最后一項。

在您的情況下,您得到middle = 6, last = 7(6+7)/2 = 6,5 ==> 6

同樣在停止狀態下,您應該檢查middle === last || middle === first middle === last || middle === first進行值檢查,以防止無效索引錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM