leetcode704. 二分查找

题目链接:704. 二分查找 - 力扣(LeetCode)

思路:题目思路就是要用二分法找到元素所在下标,在用二分法的过程中,注意

1.数组下标是从0开始,且设置中间值时,使用 middle=left+((right-left)>>2),若使用(right+left)/2,可能会出现数据溢出。

2.判断while循环时是left<=right,以及middle=left-1还是middle=left以及middle=right+1还是right,代入进去试一试即可,以及要判断自己最初设置的边界值是什么,比如最初设置left=0,right=nums.size()-1,这表明是一个左闭右闭区间,此时当middle<left或者middle>right时,middle=left-1以及middle=right+1,若middle=right,此时就可以取到right,但此时right是没必要取的。

以下附上代码:

class Solution {

public:

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

         int left=0;//定义左区间

         int right=nums.size()-1;//定义右区间

         while(left<=right) //判断条件

         {

              int middle=left+((right-left)>>2); //定义中间值

              if(nums[middle]>target)   //判断中间值与目标值的大小

              {              

                  right=middle-1;    

              }

              else if(nums[middle]<target)  //判断中间值与目标值的大小

              {

                  left=middle+1;

              }  

              else      

              {

                   return middle;

              }

         }                      

         return -1;//根据题意,不存在则返回-1

    }

};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值