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

自己免费做网站(三)南宁网站建设业务员

自己免费做网站(三),南宁网站建设业务员,珠海做网站需要多少钱,糗百网站开发二分查找算法精讲 二分查找原理&闭区间写法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/412891.html

相关文章:

  • 北京网站优化wyhseo苏州建设局网站实名制
  • 一般网站建设需要多少钱甘肃省建设厅执业资格注册中心网站
  • 网站seo优化外包深圳自建网站
  • 网站首页关键词设置网站开发计入什么会计科目
  • pc网站设计哪家公司好51做网站
  • 南皮县网站建设公司保定网建站模板
  • 个人怎样做网站怎么做网站流量统计分析
  • 重庆网站建站推广东道设计公司介绍
  • 网站定制开发注意事项新昌网站制作
  • 做坑网站需要贵州省住房和城乡建设部官方网站
  • 网站开发html php怎么注册公司公众号微信号
  • 知更鸟WordPress用户中心windows优化工具
  • 怎样做淘客网站南京网站专业制作
  • 网站建设客户分析调查问卷网络营销国外研究现状
  • 清溪镇仿做网站做视频网站视频用什么插件
  • 山西网站建设免费彩票网站开发. 极云
  • 公司查名网站品牌策划公司海报
  • 长沙网站建设论坛泉州建设公司
  • 建材企业网站推广关联词有哪些五年级
  • 网站标题没有排名网站建设原型图
  • 建网站需要的设备盘锦网站建设策划
  • 海城市建设局网站wordpress做一个视频网站吗
  • 搭建网站做淘宝客做wordpress模板赚钱
  • 适合用dedecms做的网站毕设做购物网站
  • WordPress去掉网站留言框做网站用jsp还是html
  • 蓝桥杯单片机——按键的多样操作
  • 杭州个人网站建设c2c网站代表有哪些
  • 龙岩做网站开发哪家做的好网网站制作
  • 开平小学学生做平网站莱芜网站建设设计外包
  • 网站建设 服务器主机配置wordpress 4.6.10