📣 VIP通行证夏日特惠 限时立减$68
查看: 3031| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[二分/排序/搜索] 二分法小结

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
老生常谈的问题。每次写稍微变化点的二分总还是要花点时间理下index,故总结下。欢迎提意见。

1)min < max, min <= max 的应用区别:
min < max 终止后元素尚未检查完要检查min/max;  max <= max 终止后无需检查min/max;

2)min/max= mid or mid +/- 1 的区别:
只剩两个元素的情况来讨论, 如果mid落在min这边,如果min = mid,target > mid 进入死循环,故min总需要min = mid + 1;
只剩一个元素的情况来讨论, mid = max, mid = min 均可能进入死循环;所以这种情况必然需要 min < mid;

重复元素找两边:
我们希望锁定最后一个元素,故:min < max后,最后来判定min的大小;
找最左边 max = mid - 1 or mid不重要;找最右边的反之亦然,但找最右边的integer有个技巧就是找最左边的target + 1,然后利用min来比较。

延伸技巧/思考:
1)使用while判断min + 1 < max后分别判断min/max,思路会更清晰,但代码会更笨拙。其实可以简化为min < max后只判断min。
2)中途终止,比如在找最左边元素的时候可以在循环内判断nums[mid] == target & (mid > 0 & nums[mid-1] != target)。这样退出循环后只需考虑不存在此元素的情况。
3)对于更复杂情况,nums[mid] == value单独开设条件分支,类似2)。

评分

参与人数 1大米 +5 收起 理由
14417335 + 5 给你点个赞!

查看全部评分


上一篇:21点游戏
下一篇:问一个复杂度的问题
推荐
Scala688 2019-3-15 08:34:51 | 只看该作者
全局:
某章讲的方法更好些。
min + 1 < max
外加最后对 两个 corner case 判断。
回复

使用道具 举报

🔗
kaipeng21 2019-3-15 06:13:14 | 只看该作者
全局:
我用这样的一个模板刷了大概LC八成以上的二分法题目。这能找到符合函数条件的最小index,找不到会返回数组的长度,范例为LC34

  1. def searchRange(self, nums: List[int], target: int) -> List[int]:
  2.         
  3.         def bsearch(arr, condition):
  4.             left, right = 0, len(arr)
  5.             while left < right:
  6.                 mid = (left+right)//2
  7.                 if condition(arr[mid]):
  8.                     right = mid
  9.                 else:
  10.                     left = mid + 1
  11.             return left
  12.         
  13.         l = bsearch(nums, lambda x: x >= target)
  14.         if l == len(nums) or nums[l] != target:
  15.             return [-1, -1]
  16.         r = bsearch(nums, lambda x: x > target)
  17.         return [l, r-1]
复制代码


评分

参与人数 1大米 +5 收起 理由
14417335 + 5 很有用的信息!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表