当前位置: 面试刷题>> 二分查找Ⅱ (经典算法题500道)


题目描述补充

题目:二分查找Ⅱ

给定一个已按照升序排列的整数数组 nums 和一个目标值 target,请编写一个函数来搜索 nums 中的 target,如果 target 存在于数组中,则返回它的索引。如果 target 不存在于数组中,则返回它在升序排列的数组中应该插入的位置,以确保数组仍然保持有序。

请注意,你可以假设数组中不存在重复的元素。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

示例 4:

输入: nums = [1,3,5,6], target = 0
输出: 0

PHP 示例代码

function searchInsert($nums, $target) {
    $left = 0;
    $right = count($nums) - 1;
    
    while ($left <= $right) {
        $mid = $left + floor(($right - $left) / 2);
        
        if ($nums[$mid] == $target) {
            return $mid;
        } elseif ($nums[$mid] < $target) {
            $left = $mid + 1;
        } else {
            $right = $mid - 1;
        }
    }
    
    // 当循环结束时,left 的值即为插入位置
    return $left;
}

// 测试示例
$nums = [1, 3, 5, 6];
$target = 5;
echo searchInsert($nums, $target); // 输出: 2

Python 示例代码

def searchInsert(nums, target):
    left, right = 0, len(nums) - 1
    
    while left <= right:
        mid = left + (right - left) // 2
        
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    
    # 当循环结束时,left 的值即为插入位置
    return left

# 测试示例
nums = [1, 3, 5, 6]
target = 5
print(searchInsert(nums, target))  # 输出: 2

JavaScript 示例代码

function searchInsert(nums, target) {
    let left = 0;
    let right = nums.length - 1;
    
    while (left <= right) {
        const mid = Math.floor((left + right) / 2);
        
        if (nums[mid] === target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    
    // 当循环结束时,left 的值即为插入位置
    return left;
}

// 测试示例
const nums = [1, 3, 5, 6];
const target = 5;
console.log(searchInsert(nums, target)); // 输出: 2

码小课 网站中有更多相关内容分享给大家学习,涵盖各种算法和数据结构,欢迎访问并深入学习。

推荐面试题