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

2025年- H62-Lc170--34.在排序数组中查找元素的第一个和最后一个位置(2次二分查找,标记向左寻找,标记向右寻找)--Java版

1.题目描述

在这里插入图片描述

2.思路

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

3.代码实现

public class H34 {public int[] searchRange(int[] nums, int target) {int start = findFirst(nums, target);int end = findLast(nums, target);return new int[]{start, end};}// 查找第一个出现的位置public int findFirst(int[] nums, int target) {int left = 0;int right = nums.length-1;int res = -1;//“这个值在数组中不存在,没有对应的下标。”默认值返回-1while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {res = mid;right = mid - 1;//向右继续查找,你不确定这是不是第一个 8,还可能在它左边还有 8!所以,为了“继续向左边找”,我们要缩小右边界:} else if (target > nums[mid]) {left = mid + 1;} else{right = mid - 1;}}return res;}// 查找最后一个出现的位置public int findLast(int[] nums, int target) {int left = 0;int right = nums.length-1;int res = -1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {res = mid;//因为这是右边区间,所以我们要往左边找还有没有该元素出现left = mid + 1;} else if (target > nums[mid]) {left = mid + 1;} else {right = mid - 1;}}return res;}public  static void main(String[] args){H34 test=new H34();int[] nums={5,7,7,8,8,10};int target=10;int[] res=test.searchRange(nums,target);System.out.print("["+res[0]+","+res[1]+"]");}
}

相关文章:

  • Visual Stuido笔记:C++二进制兼容性之间的兼容性
  • 六.MySQL增删查改
  • Day41
  • 2025年- H63-Lc171--33.搜索旋转排序数组(2次二分查找,需二刷)--Java版
  • 112 Gbps 及以上串行链路的有效链路均衡
  • 在Spring Boot中集成Redis进行缓存
  • Linux.docker.k8s基础概念
  • 设计模式——建造者设计模式(创建型)
  • Windows上用FFmpeg采集摄像头推流 → MediaMTX服务器转发流 → WSL2上拉流播放
  • Visual Studio笔记:MSVC工具集、MSBuild
  • C++ 17 正则表达式
  • 机器学习与深度学习06-决策树02
  • day17 常见聚类算法
  • 深入理解MCP模型协议:构建全能AI服务端
  • 学习STC51单片机22(芯片为STC89C52RCRC)
  • LLMTIME: 不用微调!如何用大模型玩转时间序列预测?
  • Pytorch---ImageFolder
  • 什么是闭包
  • 姜老师MBTI课程:ISTP和ISFP
  • Thinkphp6实现websocket
  • 微信小程序源码提取工具/廊坊百度关键词优化怎么做
  • 付费网站建设/池州网站seo
  • 做独立网站需要注意些什么/百度知道官网登录入口
  • 最好的网站管理系统/中国万网
  • 苏州建站模板搭建/seo是什么及作用
  • 有没有做机械加工的网站/搜索排名广告营销