当前位置: 首页 > news >正文

永久免费网站建设百度指数的使用方法

永久免费网站建设,百度指数的使用方法,网站开发如何设置视频,wordpress里面的rss订阅二分查找算法精讲 二分查找原理&闭区间写法34. 在排序数组中查找元素的第一个和最后一个位置关键的对与区间的定义 代码 左闭右开区间写法代码 开区间写法(最推荐)代码 如何处理不是> 的情况 资料来源 二分查找红蓝染色法https://www.bilibili.co…

二分查找算法精讲

  • 二分查找原理&闭区间写法
    • 34. 在排序数组中查找元素的第一个和最后一个位置
      • 关键的对与区间的定义
    • 代码
  • 左闭右开区间写法
    • 代码
  • 开区间写法(最推荐)
    • 代码
  • 如何处理不是>= 的情况

资料来源 二分查找红蓝染色法https://www.bilibili.com/video/BV1AP41137w7?vd_source=02eff3861fbae92e5089ad13f3b33f20&spm_id_from=333.788.videopod.sections

二分查找原理&闭区间写法

34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置

在这里插入图片描述

关键的对与区间的定义

关键:🔴牢牢记住这个区间的定义,是解题的关键!【补充】理解二分,请牢记区间的定义!区间内的数(下标)都是还未确定与 target 的大小关系的,有的是 < target,有的是 ≥ target;区间外的数(下标)都是确定与 target 的大小关系的。

在这里插入图片描述
在这里插入图片描述

代码

class Solution {public int[] searchRange(int[] nums, int target) {int start = lowerBound(nums, target);if (start == nums.length || nums[start] != target) {return new int[]{-1, -1}; // nums 中没有 target}// 如果 start 存在,那么 end 必定存在int end = lowerBound(nums, target + 1) - 1;return new int[]{start, end};}// lowerBound 返回最小的满足 nums[i] >= target 的下标 i// 如果数组为空,或者所有数都 < target,则返回 nums.length// 要求 nums 是非递减的,即 nums[i] <= nums[i + 1]private int lowerBound(int[] nums, int target) {int left = 0;int right = nums.length - 1; // 闭区间 [left, right]while (left <= right) { // 区间不为空// 循环不变量:// nums[left-1] < target// nums[right+1] >= targetint mid = left + (right - left) / 2;if (nums[mid] >= target) {right = mid - 1; // 范围缩小到 [left, mid-1]} else {left = mid + 1; // 范围缩小到 [mid+1, right]}}// 循环结束后 left = right+1// 此时 nums[left-1] < target 而 nums[left] = nums[right+1] >= target// 所以 left 就是第一个 >= target 的元素下标return left;}
}

左闭右开区间写法

代码

class Solution {public int[] searchRange(int[] nums, int target) {int start = lowerBound(nums, target);if (start == nums.length || nums[start] != target) {return new int[]{-1, -1}; // nums 中没有 target}// 如果 start 存在,那么 end 必定存在int end = lowerBound(nums, target + 1) - 1;return new int[]{start, end};}// lowerBound 返回最小的满足 nums[i] >= target 的下标 i// 如果数组为空,或者所有数都 < target,则返回 nums.length// 要求 nums 是非递减的,即 nums[i] <= nums[i + 1]private int lowerBound(int[] nums, int target) {int left = 0;int right = nums.length; // 左闭右开区间 [left, right)while (left < right) { // 区间不为空// 循环不变量:// nums[left-1] < target// nums[right] >= targetint mid = left + (right - left) / 2;if (nums[mid] >= target) {right = mid; // 范围缩小到 [left, mid)} else {left = mid + 1; // 范围缩小到 [mid+1, right)}}// 循环结束后 left = right// 此时 nums[left-1] < target 而 nums[left] = nums[right] >= target// 所以 left 就是第一个 >= target 的元素下标return left;}
}

开区间写法(最推荐)

代码

class Solution {public int[] searchRange(int[] nums, int target) {int start = lowerBound(nums, target);if (start == nums.length || nums[start] != target) {return new int[]{-1, -1}; // nums 中没有 target}// 如果 start 存在,那么 end 必定存在int end = lowerBound(nums, target + 1) - 1;return new int[]{start, end};}// lowerBound 返回最小的满足 nums[i] >= target 的下标 i// 如果数组为空,或者所有数都 < target,则返回 nums.length// 要求 nums 是非递减的,即 nums[i] <= nums[i + 1]private int lowerBound(int[] nums, int target) {int left = -1;int right = nums.length; // 开区间 (left, right)while (left + 1 < right) { // 区间不为空// 循环不变量:// nums[left] < target// nums[right] >= targetint mid = left + (right - left) / 2;if (nums[mid] >= target) {right = mid; // 范围缩小到 (left, mid)} else {left = mid; // 范围缩小到 (mid, right)}}// 循环结束后 left+1 = right// 此时 nums[left] < target 而 nums[right] >= target// 所以 right 就是第一个 >= target 的元素下标return right;}
}

如何处理不是>= 的情况

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/417544.html

相关文章:

  • 茂名网站建设服务扬州新闻头条最新消息
  • 用ps怎么做网站步骤做网站的怎么获取客户信息
  • 网站建设 江苏做外汇应该看哪一家网站
  • 网站建设项目数智慧团建入口登录网站
  • 如何加强旅游电子商务网站的建设计算机网站建设与管理是什么
  • 做网站如何对接支付网站建设与建设
  • 营销网站建设的重要性网上开店的基本流程有哪些
  • 书店网站网站建设规划书一个网站可以同时几个主域名吗
  • 商标设计网站猪八戒WordPress文章设置时间免费
  • 公司做网站需要哪些内容不限次数观看视频的app
  • 网站能用到管理后台上吗陇南建设网站
  • 企业建网站选中企动力网站搭建书籍推荐
  • 男和男人怎么做那个视频网站广州10大网站服务品牌
  • 淘宝联盟链接的网站怎么做司法局网站建设工作汇报
  • 网站的前端怎么做移动端网站开发前端模板
  • 链接网站制作百度站长平台链接
  • 邢台网站建设免费做网站排名专业的深圳网站建设公司哪家好
  • 门户网站怎么开发百度搜索站长平台
  • 天津 公司网站建设网站友情链接作用
  • 一个网站做多少页面数量合适卓越 网站
  • 人力资源网站模板个人网站可以做资讯吗?
  • 一般网站推广要多少钱网站需要去工信部做备案吗
  • 网站建设佰首选金手指十八什么是网站流量
  • 网站cps后台怎么做wordpress定时器插件
  • 淘宝活动策划网站公司网页网站建
  • 做网站应该画什么图推荐做ppt照片的网站
  • 自媒体网站建设惠州建设厅网站
  • 保定专业网站建设公司快速seo排名优化
  • 网站建设与规划试卷电子商务 做网站
  • 做cpa没有网站怎么办河北智慧团建网站登录