查看: 1021| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

刷题记录

全局:

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

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

x
转专业的渣渣写了2周的hci作业。上上周开始刷利口,听了几个刷题辅导班。这周正式开始,用Julie and Julia里的方式,发表一个公开日志,倒计时一年。语言: c++




上一篇:开始刷题追梦,只要相信就成功了一半
下一篇:每天五道题 坚持四十天
🔗
 楼主| kwongk 2018-10-27 23:27:38 来自APP | 只看该作者
全局:
最近是被class困扰
回复

使用道具 举报

🔗
 楼主| kwongk 2022-2-23 16:36:42 | 只看该作者
全局:
本帖最后由 kwongk 于 2022-2-23 00:40 编辑

二分查找
两边闭合 边界查找 查看left right 最终越界情况,因为终止条件是left == right + 1
  1. int binary_search(int[] nums, int target) {
  2.     int left = 0, right = nums.length - 1;
  3.     while(left <= right) {
  4.         int mid = left + (right - left) / 2;
  5.         if (nums[mid] < target) {
  6.             left = mid + 1;
  7.         } else if (nums[mid] > target) {
  8.             right = mid - 1;
  9.         } else if(nums[mid] == target) {
  10.             // 直接返回
  11.             return mid;
  12.         }
  13.     }
  14.     // 直接返回
  15.     return -1;
  16. }

  17. int left_bound(int[] nums, int target) {
  18.     int left = 0, right = nums.length - 1;
  19.     while (left <= right) {
  20.         int mid = left + (right - left) / 2;
  21.         if (nums[mid] < target) {
  22.             left = mid + 1;
  23.         } else if (nums[mid] > target) {
  24.             right = mid - 1;
  25.         } else if (nums[mid] == target) {
  26.             // 别返回,锁定左侧边界
  27.             right = mid - 1;
  28.         }
  29.     }
  30.     // 最后要检查 left 越界的情况
  31.     if (left >= nums.length || nums[left] != target) {
  32.         return -1;
  33.     }
  34.     return left;
  35. }

  36. int right_bound(int[] nums, int target) {
  37.     int left = 0, right = nums.length - 1;
  38.     while (left <= right) {
  39.         int mid = left + (right - left) / 2;
  40.         if (nums[mid] < target) {
  41.             left = mid + 1;
  42.         } else if (nums[mid] > target) {
  43.             right = mid - 1;
  44.         } else if (nums[mid] == target) {
  45.             // 别返回,锁定右侧边界
  46.             left = mid + 1;
  47.         }
  48.     }
  49.     // 最后要检查 right 越界的情况
  50.     if (right < 0 || nums[right] != target) {
  51.         return -1;
  52.     }
  53.     return right;
  54. }
复制代码
回复

使用道具 举报

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

本版积分规则

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