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

C++实现:在排序数组中找到最接近目标值的数字

以下是使用 C++ 实现的代码,用于在一个从小到大排序的整数数组中找到最接近给定目标值 `k` 的数字。如果数组中有多个数字与 `k` 的距离相同,返回最小的那个数字: ```cpp #include <iostream> #include <vector> #include <cmath> // 函数用于找到最接近目标值 k 的数字 int findClosestNumber(const std::vector<int>& nums, int k) { int left = 0, right = nums.size() - 1; int closest = nums[0]; int minDiff = std::abs(nums[0] - k); while (left <= right) { int mid = left + (right - left) / 2; int diff = std::abs(nums[mid] - k); // 如果当前差值更小,或者差值相同但当前数字更小,则更新 closest 和 minDiff if (diff < minDiff || (diff == minDiff && nums[mid] < closest)) { closest = nums[mid]; minDiff = diff; } if (nums[mid] < k) { left = mid + 1; } else { right = mid - 1; } } return closest; } int main() { std::vector<int> nums = {1, 2, 4, 5, 6, 7}; int k = 3; int result = findClosestNumber(nums, k); std::cout << "最接近 " << k << " 的数字是: " << result << std::endl; return 0; } ``` ### 代码解释: 1. **函数 `findClosestNumber`**: - 初始化 `left` 为数组的起始位置,`right` 为数组的末尾位置。 - 初始化 `closest` 为数组的第一个元素,`minDiff` 为第一个元素与目标值 `k` 的差值的绝对值。 - 使用二分查找,计算中间位置 `mid`,并计算 `nums[mid]` 与 `k` 的差值的绝对值 `diff`。 - 如果 `diff` 小于 `minDiff`,或者 `diff` 等于 `minDiff` 但 `nums[mid]` 小于 `closest`,则更新 `closest` 和 `minDiff`。 - 根据 `nums[mid]` 与 `k` 的大小关系,更新 `left` 或 `right`。 2. **主函数 `main`**: - 定义一个示例数组 `nums` 和目标值 `k`。 - 调用 `findClosestNumber` 函数,将结果存储在 `result` 中。 - 输出最接近 `k` 的数字。 ######[AI问答 | 662点数解答 | 2026-08-10 18:06:32]

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