当前位置: 面试刷题>> 二分查找Ⅱ (经典算法题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 示例代码 ```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 示例代码 ```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 示例代码 ```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 ``` **码小课** 网站中有更多相关内容分享给大家学习,涵盖各种算法和数据结构,欢迎访问并深入学习。
推荐面试题