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

Java每日刷题之二分算法

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

 转化 

 通过题目时间复杂度为O(logN),我们就可以联想到二分算法,但是我们前面学到的算法,是查找出,有序数组里的值,并不是求其中的范围,于是我们可以将找到这个值出现的范围转化为 

通过二分法找到最左边下标以及最右边下标

思路:

1.找到最左边下标

第一步:根据mid的与target的大小进行left和right的移动,如图,当t<=mid,说明最小下标点一定在左边,所以移动right ,  将right赋值给mid,重新进入循环,这样即可得到最左边的下标

2.细节处理

1.当right == left的同时,左端点就是这个点,所以循环条件为left < right

2.在mid范围内mid最大值比最小下标小1,所以left = mid+1;

3.当left和right中间无元素时,取中点方式的不同可能会造成死循环,分析图如下

4.得到值最左边下标

具体思路图如下

2.找到最右边下标

 实现思路

细节处理

由于right 在 t < mid内,所以在t < mid内,想要left 与right 相交,就得right = mid -1; 

取中间点的方法和上面找到最左边下标思路相同

注意 

考虑没有target值和数组为空的情况

代码实现

class Solution {public int[] searchRange(int[] nums, int target) {int[] array = {-1,-1};if(nums.length == 0) return array;//找到左边界点int left = 0,right = nums.length-1;while(left<right){int mid = left +(right-left)/2;if(nums[mid] < target){left = mid+1;}else{right = mid;}}if(nums[left] != target) return array;else{array[0] = left;}//找到右边界点 left = 0;right = nums.length-1;while(left<right){int mid = left +(right-left+1)/2;if(nums[mid] > target){right = mid-1;}else{left = mid;}}if(nums[left] != target) return array;else{array[1] = right;} return array;}}

http://www.lryc.cn/news/475815.html

相关文章:

  • 【mod分享】极品飞车9仿虚幻引擎模组,支持光追,高清纹理材质,体验一会虚幻引擎风格的极品9
  • 【启程Golang之旅】并发编程构建简易聊天系统
  • 微信小程序的开发流程
  • 十分钟快速让你搞懂 Vue3 和 React 的区别
  • 头歌——机器学习(线性回归)
  • AI驱动无人驾驶:安全与效率能否兼得?
  • 使用Git LFS管理大型文件
  • OpenAI终于正式上线搜索功能,搜索行业要变天了?
  • ssm《数据库系统原理》课程平台的设计与实现+vue
  • Java SpringBoot调用大模型AI构建AI应用
  • MySQL【二】
  • SQL 常用语句
  • 前端埋点系统之如何用heatmap.js画网页热力图
  • CentOS 7系统下Redis Cluster集群一键部署脚本发布
  • 自编以e为底的对数函数ln,性能接近标准库函数
  • Java中的日期时间
  • 位置编码的表示
  • 0,国产FPGA(紫光同创)-新建PDS工程
  • c++联合
  • Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入
  • Java 文件操作与IO流
  • 探索开源MiniMind项目:让大语言模型不再神秘(1)
  • Android 大疆面经
  • 【2024-10-31-2024-11-03】LeetCode刷题——python语法基础题
  • 【算法】二分查找
  • 第十五章 Vue工程化开发及Vue CLI脚手架
  • 【Grafana】Grafana 基础入门
  • 如何获取页面上所有input框
  • 0-ARM Linux驱动开发-字符设备
  • 使用 Faster Whisper 和 Gradio 实现实时语音转文字