134.二分查找

Posted 半步多里敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了134.二分查找相关的知识,希望对你有一定的参考价值。

题号704:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

 

提示:

你可以假设 nums 中的所有元素是不重复的。

n 将在 [1, 10000]之间。

nums 的每个元素都将在 [-9999, 9999]之间。


解题思路:

二分法查找,因为数组升序排列,设置三个变量,记录左、中、右三个位置(p、q、mid);

若mid位置的值小于target,则继续在mid右侧那一半查找,

若mid位置的值大于target,则继续在mid左侧那一半查找,

若等于,则直接返回;

重复上述步骤,若直到数组遍历完毕,仍未返回,则返回-1。


代码实现:

class Solution {

public:

    int search(vector<int>& nums, int target) {

        int size=nums.size();

        int mid=size/2;

        int p=0,q=size-1;

        while(p<=q){

            if(nums[mid]==target){

                return mid;

            }else if(nums[mid]>target){

                q=mid-1;

            }else if(nums[mid]<target){

                p=mid+1;

            }

            mid=(p+q)/2;

        }

        return -1;

    }

};

以上是关于134.二分查找的主要内容,如果未能解决你的问题,请参考以下文章

Task 04:数组二分查找

异序二分查找 二分查找方程根 二分查找重复元素最后一个

每周算法小知识之二分查找

查找算法之“二分查找”

java 二分查找法

hiho36 二分·二分查找二分查找