/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型
 */
function search(nums, target) {
    // write code here
    // 二分查询,参数分别为数组,目标值,左边界,右边界
    function getIndex(list, val, l, r) {
        // 对左右边界进行判定
        if (l < r) {
            // 取中位数下标
            let mid = parseInt((l + r) / 2);
            if (list[mid] > val) {
                // 若中位数大于目标值,则在左半部分搜索
                return getIndex(list, val, l, mid);
            } else if (list[mid] < val) {
                // 若中位数小于于目标值,则在右半部分搜索
                return getIndex(list, val, mid + 1, r);
            } else {
                // 若中位数等于目标值,则返回中位数的下标
                return mid;
            }
        } else {
            if (l == r && list[l] == target) {
                // 若搜索范围是1且对应值等于目标值,则返回下标
                return l;
            }
        }
        // 若左边界大于右边界,则找不到
        return -1;
    }
    let len = nums.length;
    let index = getIndex(nums, target, 0, len - 1);
    // console.log("index:", index);
    return index;
}
module.exports = {
    search: search
};