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

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

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

介绍

本算法测验是SP2竞赛第一题,针对给定的升序数组进行查找操作。本题考察程序员的二分查找算法实现能力。

问题描述

给定一个升序数组,查找指定的数,若存在返回下标,不存在返回-1。

算法思路

因为数组已经是升序排列,可以采用二分查找算法进行查找。具体步骤如下:

  1. 定义左边界left和右边界right,分别指向数组第一个和最后一个元素
  2. while循环在 left <= right 的条件下执行:
    • 计算中间位置mid = (left + right) / 2
    • 如果nums[mid]等于目标值,则返回mid
    • 如果nums[mid]小于目标值,则说明目标值在右半边,把 left = mid + 1
    • 如果nums[mid]大于目标值,则说明目标值在左半边,把 right = mid - 1
  3. 如果while循环结束还没找到目标值,说明数组中不存在该值,返回-1。
代码实现
int binarySearch(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}
复杂度分析

时间复杂度:O(log n)

空间复杂度:O(1)

总结

二分查找是一种高效的查找算法,但要求待查找数组必须是有序的,否则需要先排序。在实际应用中,二分查找更多地用于对数值型数据的查找,对于字符串等非数值型数据的查找,可以采用其他算法。