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