这是一个使用二分查找的例题题目如下:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
时间: 2025-06-26 15:00:47 浏览: 13
### 实现二分查找算法的示例代码及解析
以下是基于二分查找法实现的一个解决方案,该方案适用于在一个升序数组中找到目标值并返回其索引。如果目标值不存在,则可以扩展逻辑来处理插入位置的需求。
#### Python 示例代码
```python
def binary_search(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 # 调整右边界
return -1 # 若未找到目标值,返回 -1
```
上述代码实现了基本的二分查找功能[^2]。通过不断调整左右指针的位置,逐步缩小搜索范围直到定位目标值或确认目标值不存在。
---
#### Java 示例代码
以下是一个使用 `Collections.binarySearch` 的例子,展示了如何利用内置库完成相同的功能:
```java
import java.util.*;
public class BinarySearchExample {
public static void main(String[] args) {
List<Integer> sortedList = Arrays.asList(1, 3, 5, 6, 9, 13);
int index = Collections.binarySearch(sortedList, 5); // 查找目标值 5
System.out.println("Index of 5 is: " + index);
index = Collections.binarySearch(sortedList, 7); // 查找不存在的目标值 7
System.out.println("Insert position for 7 is: " + (-index - 1));
}
}
```
此代码片段演示了如何调用标准库中的 `binarySearch` 方法[^3],并通过计算负数返回值来确定目标值应插入的位置。
---
#### 解析
1. **Python 版本**
- 初始设置两个指针分别指向数组的第一个元素 (`left`) 和最后一个元素 (`right`)。
- 计算中间位置 `mid` 并比较当前中间值与目标值的关系。
- 根据比较结果更新指针位置,从而减少每次迭代的搜索空间大小。
- 当 `left > right` 时结束循环,表示未能找到目标值。
2. **Java 版本**
- 使用 `Collections.binarySearch` 可快速实现二分查找操作。
- 对于不存在的目标值,返回的是一个负数值 `(insertion point)`,可以通过 `-return_value - 1` 来获取合适的插入位置。
这两种方式均满足题目需求,并提供了清晰易懂的实现路径。
---
阅读全文
相关推荐














