定一个长度为n的单调递增的正整数序列,即序列中的每一个数都比前一个数大,有m个询问,每次询问一个x,问序列中最后一个小于等于x的数是什么,请写出完整代码
时间: 2024-02-21 09:57:12 浏览: 101
以下是基于二分查找的代码实现:
```python
def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] <= target:
if mid == len(arr) - 1 or arr[mid+1] > target:
return arr[mid]
else:
left = mid + 1
else:
right = mid - 1
return None
n = int(input())
nums = list(map(int, input().split()))
m = int(input())
for i in range(m):
x = int(input())
print(binary_search(nums, x))
```
其中,`binary_search` 函数接收一个单调递增的正整数序列 `arr` 和目标数 `target`,返回序列中最后一个小于等于 `target` 的数。
在 `binary_search` 中,我们使用了二分查找的思想,首先将左右指针分别指向序列的起始位置和末尾位置,然后在循环中计算中间位置 `mid`,判断 `arr[mid]` 与 `target` 的大小关系,如果 `arr[mid] <= target`,说明最后一个小于等于 `target` 的数可能在 `mid` 的右侧,于是将左指针移动到 `mid+1` 的位置继续查找;如果 `arr[mid] > target`,说明最后一个小于等于 `target` 的数可能在 `mid` 的左侧,于是将右指针移动到 `mid-1` 的位置继续查找。最终,如果找到了最后一个小于等于 `target` 的数,返回该数;否则返回 `None`。
在主程序中,我们首先读入长度为 `n` 的单调递增的正整数序列 `nums`,然后读入 `m` 个询问,并依次对每个询问进行二分查找并输出结果。
阅读全文