📅  最后修改于: 2023-12-03 15:28:48.297000             🧑  作者: Mango
这是一道程序员常见的面试题。题目如下:
给定一个有序数组,返回这个数组中给定元素第一次出现的下标,如果这个元素不存在于数组中,则返回 -1。
例如,输入数组 [1, 2, 2, 3, 4, 4, 4, 5] 和给定元素 4,应该返回 4。输入相同数组和给定元素 6,应该返回 -1。
这道题可以用二分查找算法来解决。二分查找的思想是先在有序数组的中间查找目标元素,如果目标元素大于中间元素,则在右半部分查找。如果目标元素小于中间元素,则在左半部分查找。如果相等,则返回该元素的下标。
代码如下:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] > target:
right = mid - 1
elif arr[mid] < target:
left = mid + 1
else:
return mid
return -1
这个函数接受一个有序数组和一个目标元素作为参数,返回目标元素在数组中第一次出现的下标。如果目标元素不存在于数组中,则返回 -1。
使用示例:
arr = [1, 2, 2, 3, 4, 4, 4, 5]
target = 4
result = binary_search(arr, target)
print(result) # 输出 4
target = 6
result = binary_search(arr, target)
print(result) # 输出 -1
这道题的时间复杂度是 O(log n),非常高效。