34-查找区间

【LeetCode刷题】专题三:二分查找模板 专题三:二分查找模板 阅读详情

题目

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

进阶:

你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

提示:

0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109

题解一

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int indexLow=binarySearch(nums,target,true);
        int indexHigh=binarySearch(nums,target,false)-1; 				          if(indexLow<=indexHigh&&indexHigh<nums.length&&nums[indexLow]==target&&nums[indexHigh]==target){//indexLow<=indexHigh要考虑集合长度为1的情况
            return new int[]{indexLow,indexHigh};
        }
        return new int[]{-1,-1};
    }
    public int binarySearch(int[] nums,int target,boolean flag){
        //flag=false:大于的,true:大于等于的
        int left=0;
        int right=nums.length-1;
        int ans=nums.length;
        while(left<=right){//<=的情况要注意,在循环体中找到答案后退出,所以需要=
            int mid=left+(right-left)/2;
            if(nums[mid]>target||(flag&&nums[mid]>=target)){
                right=mid-1;
                ans=mid;
            }else{
                left=mid+1;
            }
        }
        return ans;
    }
}

笔记:

  1. 搜索一个区间内的target,需要复用二分搜索。
  2. 答案区间为第一次发现target的index和第一个比target大的index-1.
一文读懂 SAP Web Dispatcher 配置参考:让 Gateway、OData 与后端服务各走各路 SAP Web Dispatcher在Fiori项目中常被低估,实际上它作为企业系统的HTTP(s)入口,承担着流量分发和安全防护双重职责。该组件通过URL路径规则(如/sap/opu/odata/转发至Gateway系统)实现多系统路由,隐藏后端复杂性,提供统一访问入口。配置要点包括HTTPS参数设置、客户端证书转发、端口定义以及系统冲突处理策略。合理的配置能确保前端统一访问、网络边界清晰可控,同时降低跨团队协作成本。生产环境需根据实际网络架构调整官方示例配置。 阅读详情

相关推荐

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2203

数据库语法总结(10)——区间查询

数据库语法总结(10)——区间查询

m0_61746796的博客 443

深入解析EXI协议在ISO15118-2命令测试中的编解码实践

本文深入探讨了EXI协议在ISO15118-2车桩通信标准中的关键作用与实践方法。EXI编解码测试是确保通信准确性与效率的核心环节,文章详细介绍了从搭建测试环境、选择工具库到编写完整测试代码的全过程,并分析了结果差异的常见原因与调试技巧,为电动汽车充电系统的开发者提供了实用的技术指南。

potato的博客 1050

在有序序列中查找某关键字的区间

/** *    实验题目: *        在有序序列中查找某关键字的区间 *    实验目的: *        掌握折半查找的过程及其算法设计 *    实验内容: *        设计程序,在有序序列中查找某关键字的区间。 *    例如序列为(1,2,2,3),对于关键字2,其位置区间[1,3)。 *    解决思路:利用折半查找思路 */ #include &lt;stdio.h...

xiezhi123456的博客 2631

PID详解

1、什么是PID及其作用 设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID 根据此误差调整输入值,直至输出达到设定值. 为什么需要PID呢,比如控制温度,我们需要设置一个要达到的目标温度值,当将温度稳定在目标温度值 例如,我们希望水的目标温度值为70°,其希望无非就是可以快速而且无抖动的达到70°,并稳定在70° 如果我们使用普通的方式加热,当温度到达70°后就以及停止加热,岂不是简单快速,当然用在要求不高的场合也可以,但是如果要求更高的场合呢,会出现温度到达70°后......

weixin_48435215的博客 5万+

数字IC后端实现之快速获取innovus中drv violation的所有net list

数字IC后端设计实现之快速获取innovus中drv violation的所有net list

weixin_37584728的博客 3350

数据结构 第七章 查找 学习笔记

目录 一、查找的一些概念和术语 二、线性表的查找 7.1 顺序查找(暴力) 7.2 折半查找(二分查找) 7.3 分块查找 三、树表的查找 7.1 二叉排序树 7.2 平衡二叉树(AVL树) 四、散列表的查找 7.1 散列表的一些基本概念 7.2 散列函数的构造方法 7.3 处理冲突的办法 7.3.1 开放地址法 7.3.2 链地址法 一、查找的一些概念和术语 1)查找表:有同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着完全松散的关系,.

m0_61126523的博客 650

PADS VX2.7学习记录05-PADS Layout设计文件Gerber等输出整理

在“PDF Document”栏中,依次选中除REF-TOP和REF-BOT之外的文件,单击图标,将其余PDF Document文件进行删除,如图所示。然后单击【生成PDF】按钮,即可创建一份PDF格式的位号图。

tianpu2320959696的博客 1027

有序序列的查找

#include "stdio.h" #include<iostream> #define MAX 100 using namespace std; int Binary_Search(const int* array, int n, int key) { int low = 1; int high = n; int mid; while (low <= high) { if (array[0] < array[1])

全栈川川 868

【雕爷学编程】一款功能强大、易于使用、适用范围广泛的嵌入式Python解释器:MicroPython

1、语法方面:Micropython与Python语法基本相同,但是由于Micropython是专门为嵌入式设备设计的,因此它对标准Python的功能进行了精简和优化,去掉了一些不必要的功能,同时增加了一些嵌入式系统特有的功能。3、库方面:Micropython与Python完全不同的是,它的标准库并不完全与Python的标准库一致,特别是一些底层库和硬件相关的库。5、丰富的库和工具支持:MicroPython有丰富的库和工具支持,如GPIO控制、网络连接、传感器数据采集等,可满足各种应用需求。

雕爷学编程 5196

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 560

有序序列查找-斐波那契查找(Fibonacci Search)

斐波那契搜索,算法

Jasonchen1224的博客 1366

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1427

leetcode 34 区间查找

一、题目 分析:首先,要求了时间复杂度O(log n),说明暴力禁止 我们可以通过二分查找法确定左右区间边界 但是不能同时找出左右边界,我们可以先确定左边界,再确定右边界 class Solution { public int[] searchRange(int[] nums, int target) { int []result =ne...

yysave的专栏 358

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode 34 二分查找区间

//分别找最左边和最右边 class Solution { public int[] searchRange(int[] nums, int target){ if (nums.length == 0) return new int[]{-1, -1}; int left = searchLeft(nums, target); i...

TIMELIMITE的专栏 518

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣-34查找区间

题目 1.描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 2.示例 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 3.思路 可以用二分查找找出第一个位置和最后一个位置,但是寻找的方法有所不同,需要实现两个二分查找。我们将寻找 target 最后一个位置,转换成寻找 target+1 第

dychf的博客 454

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LeetCode # 34 查找区间

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是O(log n) 级别。 如果数组中不存在目标值,返回[-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 解题思路:找到某一个元素的区间,我们可以转换为找该元素的开...

婷子的博客 591

LeetCode 34 Meidum 区间查找 Python

方法一:     My Method_v3     算法:二分查找     思路:            用二分查找找两次target,一次在查找start,一次查找end             每次查找的框架和二分查找相差无几,关键在于由于元素会有多个重复,也就是说当num[mid]==targt时         的mid不一定是我们要查找的左右端点。所以要添加左右端点的限制 ...

h 551

34.查找某数的区间位置

Search for a Range问题描述:Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.Your algorithm’s runtime complexity must be in the order of O(

m0_37625947的博客 575

34. Search for a Range 查找一个区间

Given an array of integers sorted in ascending order, find the starting and ending position of a given target value. Your algorithm's runtime complexity must be in the order of O(log n). If the

李白-2017的博客 259

二分查找 查找区间 34. Find First and Last Position of Element in Sorted Array

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. If target is not found in the array, return [-1, -1]. You must write an algorithm with O(log n) runtime complexity. Example 1: Input:.

HuiFeiDeTuoNiaoGZ的博客 99

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

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。

weixin_45008617的博客 303

34. 在排序数组中查找元素的第一个和最后一个位置:用两个边界定位区间

这篇文章介绍了如何在非递减整数数组中高效查找目标值的起始和结束位置。核心思路是将区间问题转化为两个边界问题,通过两次二分查找分别确定左边界(第一个≥target的位置)和右边界(第一个>target的位置减1)。文章详细解释了二分查找的实现细节,包括边界条件处理、避免整数溢出以及正确维护不变量。代码示例展示了一个统一处理两种边界的函数,时间复杂度为O(logn)。关键点在于准确理解边界函数的语义,保持插入位置的完整性,并正确处理各种边界情况,如目标值不存在或超出数组范围的情况。

zander258的博客 253

小白练习代码准备机试(四)二分查找红蓝染色法解决在排序数组中查找元素第一个位置和最后一个位置

原题在这里34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode),这道题首先给我们提供一个非递减的整数数组,并给出了我们一个target值。如果这道题我们采用暴力算法,也就是依次对数组元素进行遍历,找到target处的那个值,最坏情况下需要把数组全部遍历一遍,时间复杂度就是O(n),因此我们引入一个新的策略——二分查找法。

2301_77456778的博客 857

二分查找.

二分查找算法核心在于有序数组中对数级查找效率(O(logn))。其分为精准查找和边界查找两种场景:精准查找使用left<=right循环条件,直接匹配目标值;边界查找则需区分左右边界,左边界采用向下取整(mid=left+(right-left)/2),右边界采用向上取整(mid=left+(right-left+1)/2)以避免死循环。关键注意事项包括:始终使用闭区间[left,right],边界查找后必须验证目标值存在,以及统一使用防溢出的mid计算公式。算法模板化后包含精准查找、左边界和右边界三

2301_77799834的博客 345

数组指定位置添加元素_leetcode 34. 在排序数组中查找元素的第一个和最后一个位置...

前言今天主要讲解的内容是:如何在已排序的数组中查找元素的第一个和最后一个位置。以 leetcode 34 题作为例题,提供二分查找的解题思路,供大家参考。题目详述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n)...

weixin_33483567的博客 236
上一篇: 153-寻找旋转排序数组中的最小值
下一篇: 232-用栈实现队列
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codrab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值