1. ホーム
  2. javascript

[解決済み] 回転ソートされた配列の中で最小の要素を探す

2022-02-14 07:39:15

質問

回転ソートされた配列のアルファベット順の最下位要素を見つける私の関数は、要素が配列の中央にあるときと先頭にあるときに動作しているようです。 しかし、要素が配列の末尾にあるときにこのコードを動作させる方法がわかりません。Anna"の最小の要素です。以下は私のコードです。

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 無効なインデックスエラーを防ぐために、値チェックの前に。