解题思路:
经过二分查找后,low和high分别会指向比 x 大和比 x 小的元素,计算这两个元素到 x 的距离,返回更小的那个元素值,不清楚的话可以在代码中打印出经过循环后的low和high值。
注意事项:
注意边界的情况!
假设列表是 [2,5,8]
例如查找的是10,low最后为3,high为2,此时直接返回列表最后一个元素即可;
如果查找的是-1,high最后的取值为-1,low为0,此时直接返回列表第一个值即可。
参考代码:
# 数据的输入 n = int(input()) list1 = list(map(int, input().split())) m = int(input()) def find_closest(li, x): low = 0 high = len(li) - 1 while low <= high: mid = (low + high) // 2 if list1[mid] == x: return list1[mid] elif list1[mid] < x: low = mid + 1 else: high = mid - 1 # 经过二分查找后,low和high分别会指向比 x 大和比 x 小的元素 # 计算这两个元素到 x 的距离,返回更小的那个元素值 if low >= len(li): return li[-1] elif high < 0: return li[0] elif abs(li[low] - x) < abs(li[high] - x): return li[low] else: return li[high] for i in range(m): x = int(input()) print(find_closest(list1, x))
0.0分
2 人评分
不容易系列 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1267 |
WU-图形输出 (C++代码)浏览:836 |
Cylinder (C语言描述+详细分析)浏览:3375 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:866 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:650 |
复数求和 (C语言代码)浏览:994 |
理财计划 (C语言代码)浏览:494 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:497 |