0

私は今この問題に数回遭遇しました、そして私はそれに対する良い解決策を持っていません。

固定されていない間隔の単純な数値配列があるとしますmyArray。整数(負の数の場合もあります)を取り、最も近い配列の値を返すことができる関数が必要です。私の例では、それを返したい850です。

upperlower変数を使用して、渡した値に最も近い配列値を特定する必要があると思います。

私は正しい方向に進んでいますか、それともこれを達成するためのより効率的な方法がありますか?誰かが私に正しい方向にナッジを与えることができますか?

これが私がこれまでに持っているものです:

var myArray = [0,850,1800,2500,3300];

function snapTo(value){
    var upper = -1;
    var lower = -1;

    // if the value is bigger than the last array value
    if(value > myArray[myArray.length-1]){
        upper = myArray[myArray.length-1];
        lower = myArray[myArray.length-2];
    // if the value is smaller than the first array value
    } else if(value < myArray[0]){
        upper = myArray[1];
        lower = myArray[0];
    } else {
        for(var i = 0, i < myArray.length, i++){
            if(value > myArray[i]){
                upper = myArray[i];
                lower = myArray[i-1];
                break;
            }
        }
    }

    // x being the index of the closest array value to the one passed in
    return myArray[x];
}

snapTo(1200);
4

2 に答える 2

3

あなたはその代わりに二分探索を探しています!

于 2012-10-23T11:41:46.870 に答える
1

値が前の配列値よりも大きいか小さいかを特に確認する必要はないということをお伝えします。代わりに、ターゲット値と「現在の」配列要素の絶対差を計算してください。そして、これまでの最良の違いと比較して、この配列インデックスがこれまでの勝者候補であるかどうかを判断します...

于 2012-10-23T11:42:09.710 に答える