📅  最后修改于: 2023-12-03 15:10:10.309000             🧑  作者: Mango
在一个有序数组中,给定一个目标值,找到这个目标值在数组中的下标,如果目标值不存在于数组中,则返回离它最近的较小数字的下标。
这个问题其实可以用二分搜索法来解决。具体来说,我们可以找到离目标值最近的两个数字,它们分别是数组中的第k-1个数字和第k个数字(如果存在目标值,则第k个数字就是目标值)。然后我们返回第k-1个数字的下标即可。
def floor_index(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
# left和right最终停留在方案2和方案3之间,我们选择方案2
return right
# 测试
print(floor_index([1, 3, 5, 7, 9], 6)) # 2
print(floor_index([1, 3, 5, 7, 9], 10)) # 4
这里我们假设数组是升序排列的,因为题目中没有这方面的限制。这个算法的时间复杂度是O(logN),其中N是数组的长度。