【leetcode/二分】二分查找(二分查找模板题)

一. 问题描述:

就是一个有序数组,给定一个数字,存在的话返回下标,不存在的话返回-1;

 

二. 两种递归实现对比:

这道题首先应该想到的就是递归实现。

我这里所提到的两种递归实现其实就是把数组分段——一种是分为左闭右开的形式,另一种是两边都闭的形式。

· 左闭右开

int BinarySearch(vector<int> &nums, int l, int r, int target) {
  // 不是你想象地那么完美
  if (l == r) return -1;
  int m = l + (r - l) / 2;        // 防止溢出
  // 建议还是把这个判断放在最前面
  if (target == nums[m]) return m;
  else if (target > nums[m]) return BinarySearch(nums, m + 1, r, target);
  else if (target < nums[m]) return BinarySearch(nums, l, m, target);
}
  1.  优势判断终止的时候特别方便,两个指针碰到一起,就结束了。
  2.  劣势:我们左闭右开其实是把一个[a, b)的区间能过完美地分为[a, c), [c, b)这两个部分。然而这里并派不上用场——因为我还要挖掉中间一个元素,这就看上去很不和谐。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值