酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

二分查找:在排序数组中寻找最接近目标值的数字

### 📋 问题分析 要在一个从小到大排序的整数数组中找到最接近给定目标值 `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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]