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

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

二分查找到目标值然后左右找到坐标

问题在于:找左右坐标的时候时间复杂度不是O(logN)

class Solution {public int[] searchRange(int[] nums, int target) {int[] ans = {-1, -1};if (nums.length == 0) return ans;int l = 0, r = nums.length;while (l < r) {int m = (l + r) / 2;if (nums[m] == target) {ans[0] = m; ans[1] = m;int tempm = m;while (m > 0 && nums[m - 1] == target) {ans[0] = --m;}while (tempm < nums.length - 1 && nums[tempm + 1] == target) {ans[1] = ++tempm;}break;} else if (nums[m] < target) {l = m + 1;} else {r = m;}}return ans;}
}

之前提到过二分查找不仅可找到相等的数值,更关键的是它可以将数组分为截然不同的两种情况,因此我们可以借助这个性质找到第一个大于等于target的值(左下标)第一个大于target的值(右下标需要-1)(两次二分查找)

找到第一个>=x的值和找到第一个>x的值见:

2258. 逃离火灾(附:二分查找的理解)

class Solution {public int[] searchRange(int[] nums, int target) {int[] ans = {-1, -1};if (nums.length == 0) return ans;int lIndex = func(0, nums.length, nums, target);int rIndex = func(0, nums.length, nums, target + 1) - 1;if (lIndex <= rIndex) ans = new int[] {lIndex, rIndex};return ans;}public int func(int l, int r, int[] nums, int x) {int res = -1;// 找到第一个大于等于x的下标(left)// 大于等于target正常使用// 大于target相当于大于(target + 1)while (l < r) {int m = (l + r) / 2;if (nums[m] < x) {l = m + 1;} else {r = m;}}res = l;return res;}
}

相关文章:

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

二分查找到目标值然后左右找到坐标 问题在于&#xff1a;找左右坐标的时候时间复杂度不是O(logN) class Solution {public int[] searchRange(int[] nums, int target) {int[] ans {-1, -1};if (nums.length 0) return ans;int l 0, r nums.length;while (l < r) {int…...

Mysql深度分页优化的一个实践

问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…...

【JavaEE进阶】 SpringBoot配置⽂件

文章目录 &#x1f340;配置⽂件的作⽤&#x1f334;SpringBoot配置⽂件&#x1f38b;配置⽂件的格式&#x1f384;properties配置⽂件&#x1f6a9;properties基本语法&#x1f6a9;读取配置⽂件&#x1f6a9;properties的缺点 &#x1f333;yml配置⽂件yml基本语法&#x1f6…...

excel 常用函数

求和函数&#xff1a; SUM&#xff1a; 将单个值、单元格引用或区域相加。 案例&#xff1a;SUM(A1:A5) &#xff08;结果&#xff1a;A1到A5单元格的值求和&#xff09; SUMIF&#xff1a; 对选中范围内符合指定条件的值求和。 案例&#xff1a;SUMIF(B1:B5, ">50&qu…...

【React基础】– JSX语法

文章目录 认识JSX为什么React选择了JSXJSX的使用 React事件绑定this的绑定问题事件参数传递 React条件渲染React列表渲染列表中的key JSX的本质createElement源码Babel官网查看直接编写jsx代码 虚拟DOM的创建过程jsx – 虚拟DOM – 真实DOM声明式编程 阶段案例练习 认识JSX ◼ …...

SpringBoot 项目中后端实现跨域的5种方式!!!

文章目录 SpringBoot 项目中后端实现跨域的5种方式&#xff01;&#xff01;&#xff01;一、为什么会出现跨域问题二、什么是跨域三、非同源限制四、Java后端 实现 CORS 跨域请求的方式1、返回新的 CorsFilter(全局跨域)2、重写 WebMvcConfigurer(全局跨域)3、使用注解 (局部跨…...

Vue3前端开发,provide和enject的基础练习,跨层级传递数据

Vue3前端开发,provide和enject的基础练习,跨层级传递数据&#xff01; 声明:provide虽然可以跨层级传递&#xff0c;但是依旧是需要由上向下的方向传递。根传子的方向。 <script setup> import {onMounted, ref} from vue import Base from ./components/Base.vue impor…...

Python 循环结构值while循环

while循环是一种常用的循环结构&#xff0c;它会在满足特定条件的情况下重复执行一段代码块。 基本语法&#xff1a; while condition:# 循环体代码while循环的执行过程如下&#xff1a; 首先&#xff0c;判断循环条件condition&#xff08;布尔表达式&#xff09;是否为真。…...

MSSQL-识别扩展extended event(扩展事件)中的时间单位

经常使用sqlserver extended event(扩展事件)&#xff0c;但是总是忘记扩展事件使用的时间单位&#xff0c;不确定它们是 秒、毫秒、还是微秒&#xff1f; 以下下代码能够从 相关DMV中提取description字段内容来识别时间单位&#xff1a; SELECT [p].[name] [package_name],[o…...

vue3中l和vue2中v-model不同点

vue2比较让人诟病的一点就是提供了两种双向绑定&#xff1a;v-model和.sync&#xff0c; 在vue3中&#xff0c;去掉了.sync修饰符&#xff0c;只需要使用v-model进行双向绑定即可。 为了让v-model更好的针对多个属性进行双向绑定&#xff08;vue2中自定义组件中v-model只能使用…...

使用 Swift 代码优化项目编译速度

引言 软件的性能是评价一个软件质量的重要指标&#xff0c;尤其在今天这个时代&#xff0c;性能已成为大型项目不可或缺的考虑因素之一。对于用户量极大的软件&#xff0c;如网银系统、在线购物商城等&#xff0c;更是必须保证其高效稳定的性能。在这种背景下&#xff0c;优化…...

基于springboot+vue的社区团购系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…...

three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程002 - three.js正交相机OrthographicCamera</title><script src"ThreeJS/three.js"></script><script src&qu…...

Golang 搭建 WebSocket 应用(七) - 性能、可用性

在前面的文章中&#xff0c;提到过非功能性需求决定了架构。 今天我们再来考虑一下另外两个非功能性需求&#xff1a;性能和可用性。 前言 关于性能&#xff0c;其实并不是只有我们这个消息推送系统独有的问题。 对于所有的开发者而言&#xff0c;都多多少少会处理过性能相关…...

Qt 状态机框架:The State Machine Framework (一)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 一、什么是状态机框架 状态机框架提供了用于创建和执行状态图/表[1]的类。这些概念和表示法基于Harel的Statecharts:一种复杂系统的可视化形式,也是UML状态图的基…...

高通平台学习一

什么是QMI? Qualcom Message Interface 高通信息接口 高通平台目前都是非对称多核心&#xff0c;最主要的是AP和Modem。两个处理器怎么进行通信呢&#xff0c;我们把AP和Modem当作两个主机&#xff0c;问题就变得了很简单&#xff0c;TCP/IP协议不是一种非常成功的进程间跨主…...

Python爬虫时被封IP,该怎么解决?四大动态IP平台测评

在使用 Python 进行爬虫时&#xff0c;很有可能因为一些异常行为被封 IP&#xff0c;这主要是因为一些爬虫时产生的异常行为导致的。 在曾经的一次数据爬取的时候&#xff0c;我尝试去爬取Google地图上面的商家联系方式和地址信息做营销&#xff0c;可是很不幸&#xff0c;还只…...

积分梳状滤波器CIC原理与实现

CIC&#xff08;Cascade Intergrator Comb&#xff09;&#xff1a;级联积分梳状滤波器&#xff0c;是由积分器和梳状滤波器级联而得。滤波器系数为1&#xff0c;无需对系数进行存储&#xff0c;只有加法器、积分器和寄存器&#xff0c;资源消耗少&#xff0c;运算速率高&#…...

【项目管理】CMMI-原因分析与解决过程(CAR)

概述&#xff1a; “原因分析与解决”通过预防缺陷或者问题的引入以及识别并适当纳入优秀过程性能的原因&#xff0c;改进质量与生产率。 目录 1、文档结构 2、原因分析与解决过程域包括如下活动 3、选择需要加以分析的结果(启动条件) 4、过程活动与实践对照表 5、实例 1、…...

【设计模式】文件目录管理是组合模式吗?

组合模式是什么&#xff1f; 组合模式是一种将对象组合成树形结构以表示"部分-整体"的层次结构的设计模式。它使得用户对单个对象和组合对象的使用具有一致性。 组合模式在什么情况下使用&#xff1f; 当你发现你需要在代码中实现树形数据结构&#xff0c;让整体-部…...

Google I/O 2026最魔幻的一幕:发新模型的同时,Google砍了自己的CLI

5月19号凌晨&#xff0c;我刚躺下准备刷会儿手机睡觉&#xff0c;结果被朋友圈刷屏了。 Google I/O 2026&#xff0c;总共两个小时的 keynote&#xff0c;愣是让我看到凌晨两点。不是因为我有多敬业&#xff0c;而是信息量实在太大——大到我觉得不记下来&#xff0c;明天就忘了…...

Gitee Scan:关键领域软件工厂的安全检测能力分析

Gitee Scan&#xff1a;关键领域软件工厂的安全检测能力分析 文章概述 软件供应链安全正成为互联网、金融、国防等关键领域关注的焦点。Gitee Scan 是 Gitee DevSecOps 平台中集成的安全检测组件&#xff0c;提供 SAST&#xff08;静态应用安全测试&#xff09;、SBOM&#xff…...

【Flink学习】(五)Flink 并行度与任务链,任务运行核心原理

本文主要整理Flink 底层任务运行机制&#xff0c;学会合理设置并行度&#xff0c;初步具备任务调优思维。 一、并行度概念 并行度代表 Flink 任务运行的线程数量&#xff0c;决定任务处理速度&#xff0c;分为全局并行度、算子并行度、客户端并行度。 二、并行度设置 分为三种方…...

开源数据库 TimescaleDB 2.27.1 发布:性能改进与多项错误修复,官方建议尽快升级

开源数据库 TimescaleDB 2.27.1 版本正式发布&#xff0c;较 2.27.0 版本有性能改进和错误修复&#xff0c;官方建议用户尽快升级。 TimescaleDB 简介 TimescaleDB 是基于 PostgreSQL 构建的开源数据库&#xff0c;打包为 PostgreSQL 扩展程序&#xff0c;可让 SQL 扩展到时间序…...

IC617保姆级教程:用ADEXL和Calculator两步搞定CMOS晶体管的gmid设计曲线

IC617高效设计指南&#xff1a;ADEXL与Calculator协同生成CMOS晶体管gmid曲线的实战解析 在模拟集成电路设计中&#xff0c;gmid曲线作为评估晶体管工作状态的核心工具&#xff0c;直接影响着放大器的增益、噪声和功耗等关键指标。传统方法往往需要反复切换多个工具界面&#x…...

C++11、C++14、C++17、C++20常用新特性

C11自动类型推断&#xff08;auto关键字&#xff09;&#xff1a;C11引入了auto关键字&#xff0c;可以根据变量初始值自动推导出变量类型。例如&#xff1a;12auto i 42; // i被推导为int类型auto d 3.14; // d被推导为double类型基于范围的for循环&#xff08;range-base…...

硬件工程师效率翻倍:我是如何让Cadence OrCAD导出的PDF自动生成清晰书签目录的

硬件工程师效率革命&#xff1a;用OrCAD打造智能PDF文档工作流 在硬件设计领域&#xff0c;一份结构清晰的原理图PDF文档往往能大幅提升团队协作效率。想象一下这样的场景&#xff1a;当你将精心设计的电路方案交付给客户或跨部门同事时&#xff0c;对方打开的是一个带有智能书…...

MCP电路设计:从门电路到CPLD的优先级仲裁硬件实现

1. 项目概述&#xff1a;从“命令打架”到“有序排队”的电路设计在嵌入式系统、工业控制或者任何需要处理多路信号的数字电路里&#xff0c;我们经常会遇到一个头疼的问题&#xff1a;当多个输入信号同时要求一个输出设备执行不同动作时&#xff0c;系统该听谁的&#xff1f;比…...

剪映专业版教程:制作直接选择排序算法原理演示视频

前言 今天教大家用剪映制作直接选择排序算法的原理演示视频。直接选择排序的原理是&#xff1a;在同一个数组中&#xff0c;先挑一个最小的&#xff0c;跟第一位交换&#xff1b;待排序下标往后移到第二位&#xff0c;从这里开始往后找一个最小的&#xff0c;跟第二位交换&…...

三分钟完成Taotoken的API Key配置与curl调用测试

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 三分钟完成Taotoken的API Key配置与curl调用测试 基础教程类&#xff0c;面向刚注册Taotoken并获取了API Key的开发者&#xff0c;…...