📜  算法测验| SP2竞赛1 |问题26(1)

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

算法测验 | SP2竞赛1 | 问题26

这是SP2竞赛中的一道算法题,需要设计算法来解决特定的问题。这道题目需要我们编写程序,在一个有序的数组中查找一个特定的数值,并输出该数值在数组中的位置,或者输出该数值不存在于数组中。

问题描述

给出一个有序列表,和一个要查找的目标数。你需要编写一个算法,查找目标数在列表中的位置,或者如果目标数不在列表中,则返回-1。

例子
Example 1
Input: nums = [1,5,7,9,12], target = 5
Output: 1

解释:目标数5在有序列表中的位置是1。

Example 2
Input: nums = [1,5,7,9,12], target = 10
Output: -1

解释:目标数10不在有序列表中,因此返回-1。

方案设计

题目中要求查找的数值在有序数组中,因此我们可以使用二分查找来解决这个问题。二分查找的步骤如下:

  1. 声明左边界left为0,右边界right为数组长度-1。
  2. 循环遍历数组,每次计算mid=(left + right) // 2。
  3. 当nums[mid]等于目标数时,返回mid。
  4. 如果nums[mid]大于目标数,将右边界right更新为mid-1。
  5. 如果nums[mid]小于目标数,将左边界left更新为mid+1。
  6. 如果没有找到目标数,则返回-1。

下面是使用Python编写的二分查找算法:

def binary_search(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:
            right = mid - 1
        else:
            left = mid + 1
    return -1
测试

我们可以使用几个测试用例来测试我们的算法是否正确:

assert binary_search([1,5,7,9,12], 5) == 1
assert binary_search([1,5,7,9,12], 10) == -1
assert binary_search([1,2,3,4,5,6,7], 5) == 4
assert binary_search([1,2,3,5,5,5,7], 5) == 4
assert binary_search([1,2,3,4,5,6,7], 0) == -1
总结

这道题目需要使用二分查找算法,来查找一个特定数值在有序数组中的位置。通过这个例子,我们可以学习到如何使用二分查找算法来解决类似的问题。