[英]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.