LeetCode 704.二分查找

LeetCode 704.二分查找

LeetCode 704.二分查找_第1张图片

思路:

  在本篇以及之后几篇的博客中,博主将会用二分法进行解答,以此巩固二分题型。二分法一般用于具有二段性的数据中使用。比如该题为有序数组,需要我们查找一个目标值target,分析后发现,这段数据中会出现三种情况,大于target,小于target,等于target,而等于target是我们的目标,于是可以判断出,这个数组是具有二段性的,以target进行分段,由此得出使用二分法。

  我们以下面数组进行举例,首先求出一个中间值,这里我使用left + (right - left) / 2求得中间值,在某些情况下,需要在right - left后面再加上1,否则会导致死循环,具体在之后的篇章中会进行说明。求出中间值nums[mid]=3后,此时target大于3,于是可以得出,[left,mid]之间的所有数据,都不可能含有9,则可以舍去这段区间,得到left = mid + 1,然后再次进行该过程。假如nums[mid] > target,则表示[mid,right]区间可以舍去,则right = mid - 1。当nums[mid] == target时,表示找到了目标值,即可返回。如果left > right,表示整个数组都找完了也没找到目标值,返回-1。

image-20241218221108111

代码:

class Solution {
public:
    int search(vector& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        while(left <= right)
        {
            int mid = left + (right - left) / 2;
            if(target > nums[mid])
                left = mid + 1;
            else if(target < nums[mid])
                right = mid - 1;
            else return mid;
        }
        return -1;
    }
};

时间复杂度:O(LogN)  空间复杂度:O(1)
LeetCode 704.二分查找_第2张图片

你可能感兴趣的:(Leetcode,牛客题型,leetcode,算法)