二分查找:在排序数组中寻找最接近目标值的数字
### 📋 问题分析 要在一个从小到大排序的整数数组中找到最接近给定目标值 `k` 的数字,且当有多个数字与 `k` 的距离相同时返回最小的那个。可以使用二分查找来提高查找效率。 ### 💡 算法思路 1. 设立左右指针 `left` 和 `right` 分别指向数组的首尾。 2. 在二分查找过程中,比较 `mid` 位置的元素和 `mid + 1` 位置的元素与目标值 `k` 的距离。 3. 根据比较结果更新左右指针,缩小查找范围。 4. 最后返回距离目标值 `k` 最近的元素。 ### 🐍 Python 代码实现 ```python def find_closest(nums, k): # 数组元素数量 n = len(nums) # 如果数组只有一个元素,直接返回 if n == 1: return nums[0] # 左右指针 left, right = 0, n - 1 while left < right: # 中间指针 mid = left + (right - left) // 2 if abs(nums[mid] - k) > abs(nums[mid + 1] - k): # 若 mid 元素距离 k 比 mid+1 元素远,缩小左边界 left = mid + 1 else: # 否则缩小右边界 right = mid return nums[left] # 示例调用 nums = [1, 2, 4, 5, 6, 7, 8, 9] k = 3 print(find_closest(nums, k)) ``` ### ⚙️ 代码解释 1. **初始化部分**:获取数组的长度 `n`,若 `n` 为 1 则直接返回该元素。 2. **二分查找过程**:使用 `left` 和 `right` 指针,计算中间位置 `mid`。比较 `nums[mid]` 和 `nums[mid + 1]` 到 `k` 的距离,根据结果更新 `left` 或 `right`。 3. **返回结果**:最终 `left` 指针所指元素即为最接近 `k` 的元素。 ######[AI问答 | 541点数解答 | 2026-08-10 18:05:21]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)158
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)172
- C语言实现多班级学生信息管理系统:含增删改查与多样排序功能(GPT | 2547点数解答 | 2024-12-15 22:08:58)427
- C语言实现学生信息管理系统:含增删改查与多种排序功能(GPT | 6408点数解答 | 2024-12-15 22:10:03)432
- Python 实现:四位数重组求最大最小数差值(字节豆包 | 144点数解答 | 2026-02-01 12:49:54)76
- Python 代码求解:小明当选 Y 国总统至少需多少选民支持?(字节豆包 | 207点数解答 | 2026-02-01 12:51:14)78
- 拍卖干草:如何定价才能收益最大化?(DeepSeek | 1171点数解答 | 2026-02-23 21:10:09)73
- C++二分查找实战:在有序数组中寻找最接近目标值的数字(DeepSeek | 1612点数解答 | 2026-03-15 18:48:06)43
- C++实现查找排序数组中最接近目标值的数字(字节豆包 | 710点数解答 | 2026-04-26 13:10:10)66
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)410
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)422
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)387