(Js)Leetcode704。二分探索

トピック:

n要素の順序付き(昇順)整数配列numsとターゲット値targetが与えられた場合、numsでターゲットを検索し、ターゲット値が存在する場合は添え字を返し、それ以外の場合は-1を返す関数を記述します。
例1:

入力:nums = [-1,0,3,5,9,12]、target = 9
出力:4
説明:9がnumsに表示され、添え字は4です。
例2:

入力:nums = [-1,0,3,5,9,12]、target = 2
出力:-1
説明:2はnumsに存在しないため、-1を返します。

促す:

numsのすべての要素が繰り返されていないと想定できます。
nは[1、10000]の間になります。
numsの各要素は、[-9999、9999]の間になります。

アイデア:

二分探索

ここで left + (right - left) / 2 上と (left + right) / 2 同じ結果が、効果的に防止 left し、 right あまりにも多くのオーバーフロー原因に直接追加すること。

コード:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let left = 0, right =  nums.length - 1;
    while(left <= right) {
        let mid = left + parseInt((right - left) / 2);
        if(nums[mid] < target) {
            left = mid + 1;
        } else if(nums[mid] > target) {
            right = mid - 1;
        } else if(nums[mid] == target){
            return mid;
        }
    }
    return -1;
};

演算結果:

 

おすすめ

転載: blog.csdn.net/M_Eve/article/details/113139593