二分查找法

题目:

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


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4

使用二分查找的主要目的是为了提高运行效率,简化运算过程

实现二分查找有四个步骤:

一、定义middle、left、right 分别是所取数组范围的最中间、最左边、最右边的下标;

二、比较目标值target 与范围中间的那个数 nums[middle]的大小,如果target更大,锁定middle右边的数组元素,如果target更小则锁定middle下标左边的元素,这样就实现了把范围缩小一半,即二分法; 

三、改变left 或 right 的值,注意更新middle的值 ,middle是指所选范围内的中间的那个数的下标,所以应为(left+right)/2;

四、通过循环while(left<=right)不断更新 middle,left,right的值,最终找到指向和target相等的数的下标,若没有,则跳出循环return -1;

具体步骤请看以下代码:

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

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值