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

【二分查找】力扣 34. 在排序数组中查找元素的第一个和最后一个位置

一、题目

在这里插入图片描述

二、思路

将题目转化为求解 target 和 target + 1 的查找。分别采用最基础的二分查找即可。

三、题解

class Solution {public int[] searchRange(int[] nums, int target) {int n = nums.length;int start = lowerBound(nums, target);if (start == n || nums[start] != target) {return new int[] {-1, -1};}// start 找到了,end 也一定存在,因此 end 无需检验int end = lowerBound(nums, target + 1) - 1;return new int[] {start, end};}/* 寻找大于等于 target 的第一个数,若存在 target 返回 left,即为第一个 target 的位置若有序数组中都是小于 target 的数,left 一直右移,最后 left = n,返回left,即为数组长度,tips: 返回的 left 不在下标范围内若有序数组中都是大于 target 的数,right 一直左移,left始终没有移动,最后 left = 0,tips: 返回的 left 在下标范围内,但所指向的数值与 target 不同*/public int lowerBound(int[] nums, int target) {int n = nums.length;int left = 0, right = n - 1;while (left <= right) { // 区间不为空int mid = left + (right - left)/ 2; // java 防止溢出if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return left;// 最后结束时,right 在 left左边一个位置,right + 1 = left// left - 1 永远指向的是红色,right + 1 永远指向的是蓝色,left的位置就是要找}
}
http://www.lryc.cn/news/493535.html

相关文章:

  • 以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式
  • Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解
  • KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍
  • 网络原理->DNS协议和NAT协议解
  • 基于yolov8、yolov5的100种中药材检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • RuoYi排序
  • Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)
  • BASLER工业相机维修不能触发拍照如何处理解决这个问题
  • Could not locate device support files.
  • linux系统中常用文件日常使用命令记录
  • 【C++打怪之路Lv16】-- map set
  • TPU-MLIR 项目源码结构分析
  • IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“
  • Sourcetree:一款强大的Git客户端
  • Linux环境变量与本地变量
  • ChatGPT的应用场景:开启无限可能的大门
  • QT按下两次按钮,保存这期间内变换的QtextEdit控件内的数据
  • daos源码编译
  • HTML飞舞的爱心
  • C++中智能指针的使用及其原理 -- RAII,内存泄漏,shared_ptr,unique_ptr,weak_ptr
  • Linux服务器安装mongodb
  • Android11修改摄像头前后置方法,触觉智能RK3568开发板演示
  • leetcode 212. 单词搜索 II
  • Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计
  • 《Docker Registry(镜像仓库)详解》
  • AI前景分析展望——GPTo1 SoraAI
  • 超级详细讲解转义字符,\? \‘ \f \0 \t等等!!!
  • 微信小程序数据请求教程:GET与POST请求详解
  • Linux系统管理基础指南--习题
  • JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续