📜  门|门 IT 2006 |第 71 题(1)

📅  最后修改于: 2023-12-03 15:28:48.297000             🧑  作者: Mango

门|门 IT 2006 |第 71 题

这是一道程序员常见的面试题。题目如下:

给定一个有序数组,返回这个数组中给定元素第一次出现的下标,如果这个元素不存在于数组中,则返回 -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),非常高效。