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

中图法第五版SQL,支持树形结构可直接导入使用 基于第五版中图法官方数据收集整理,效果图如下: 阅读详情

 

题目链接

/**

        在一个近似递增的数组中查找指定元素,该元素可能有多个找出其出现的区间

        单次普通二分只能查到一个元素且无法确定边界;对二分改进即可

        左边界:当查到目标元素时,记录下标并将right迭代为mid-1,继续向左二分直到搜寻结束,得到左边界

        右边界:当查到目标元素时,记录下标并将left迭代为mid+1,继续向右二分直到搜寻结束,得到右边界

        即进行两次改进二分,查找左边界与右边界

        优化:

            查找左边界与右边界大量代码相同,仅left与right指针迭代逻辑不同

            添加变量boolean isLeft,控制查找方向,一个方法即可完成左、右边界的查找

*/

class Solution {
    /**
        在一个近似递增的数组中查找指定元素,该元素可能有多个找出其出现的区间
        单次普通二分只能查到一个元素且无法确定边界;对二分改进即可
        左边界:当查到目标元素时,记录下标并将right迭代为mid-1,继续向左二分直到搜寻结束,得到左边界
        右边界:当查到目标元素时,记录下标并将left迭代为mid+1,继续向右二分直到搜寻结束,得到右边界
        即进行两次改进二分,查找左边界与右边界
        优化:
            查找左边界与右边界大量代码相同,仅left与right指针迭代逻辑不同
            添加变量boolean isLeft,控制查找方向,一个方法即可完成左、右边界的查找
    */
    public int[] searchRange(int[] nums, int target) {

        //搜寻左边界
        int left = findBound(nums, target, true);
        if(left == -1) { //若为-1代表不存在该元素,无需继续搜寻
            return new int[]{-1,-1};
        }

        //搜寻右边界
        int right = findBound(nums, target, false);

        return new int[]{left, right};
    }

    private int findBound(int[] nums, int target, boolean isLeft) {
        //双指针,置于有效部分两端
        int left = 0, right = nums.length - 1;
        //不断迭代,记录已探明的边界
        int index = -1;

        while(left <= right) {
            //均分数组,缩小查找范围
            int mid = left + right >>> 1;

            //目标值在右半区,淘汰左半区
            if(nums[mid] < target) {
                left = mid + 1;
            }

            //目标值在左半区,淘汰右半区
            else if(nums[mid] > target) {
                right = mid - 1;
            }

            //查找到元素,迭代index,并依据findLeft确定查找方向
            else {
                index = mid;
                if(isLeft) { //向左继续二分,迭代right
                    right = mid - 1;
                } else { //向右二分,迭代left
                    left = mid + 1;
                }
            }
        }

        return index;
    }
}

可食用野生植物检测实战:基于YOLOv11的智能识别系统全流程指南 本文介绍了一种基于YOLOv11的可食用野生植物智能识别系统。该系统通过深度学习技术,能在0.2秒内精准识别植物是否可食用,准确率高达92%。文章详细阐述了从数据采集、标注到模型训练、验证的全流程,并开发了用户友好的Tkinter交互界面。该系统解决了户外探险和植物研究中植物识别的痛点,具有高精度、实时性和强泛化能力的特点,为户外安全提供了智能化解决方案。 阅读详情

相关推荐

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2694

3.2 二分查找专题:LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 算法剖析

shuibuxingaaa的博客 545

算法竞赛入门到进阶 --- 完整学习路线(含知识点讲解)

前言: 咳咳,接触算法竞赛也有一年了,却从来都没有进行过一次系统的学习,稀里糊涂的就这么搞了半年,如今,我决定认认真真的进行一次系统的复盘。嗯嗯,先把大体路线列出来,然后往后每天搞几篇,可能大三能完成,可能永远也不能写完这些,我只能慢慢来,一起共勉吧。冲了!(主要是太菜了,不系统学习下,怕是铜牌都拿不到呀!) 算法竞赛入门到进阶一、sort函数自定义排序二、c++容器的使用1.vector动态数组2.stack栈3.queue队列4.list链表5.set集合6.map映射三、二进制子集生成四、bfs.

qq_43514659的博客 2万+

【算法100天 | 3】筑基二分查找(含LeetCode 34题 在排序数组中查找元素的第一个和最后一个位置)

1、在排序数组中判断某个数是否存在 2、在有序数组中找到第一个大于等于某个数的数 3、在有序数组中找到第一个小于等于某个数的数 4、在排序数组中查找元素的第一个和最后一个位置

健身变秃,coding变强 483

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 299

探索数据库领域 SQL 的 JSON 数据处理技巧

在当今数字化时代,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种领域,如 Web 应用、移动应用、大数据处理等。数据库作为数据存储和管理的核心,需要具备处理 JSON 数据的能力。本文章的目的在于深入探索 SQL 语言在数据库中处理 JSON 数据的技巧,涵盖从基础的 JSON 数据查询到复杂的 JSON 数据操作,帮助读者全面了解和掌握 SQL 处理 JSON 数据的方法。

2502_91592937的博客 925

刷题记录 HOT100 二分查找-3:34. 在排序数组中查找元素的第一个和最后一个位置

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

weixin_44610684的博客 331

新手福利!大龙虾OpenClaw可视化管理工具来了!告别命令行,这个可视化工具让OpenClaw管理变得超简单

还在用命令行管理OpenClaw?🚀 这个跨平台可视化工具支持14+AI模型,一键切换,还能对接微信飞书钉钉等8大消息渠道,让AI助手管理变得简单直观 ✅ 暗色主题护眼舒适,Rust后端高性能低占用,新手也能轻松上手 🎯

XiaoqiangClub的博客 761

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

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

canGfly的博客 125

Windows11安装配置openclaw+deepseek(大龙虾)

密码可以随便设置(注意wsl系统本质上是linux系统,设置密码系统是不会像windows一样显示*点位符的),输入密码后敲回车再次输入密码,输入后敲回车。如果不小心关闭这个界面,可以再次进入powershell,输入wsl进行系统。在powershell中输入:curl -fssL https://openclaw.ai/install.sh | bash。下面是否通过第3方平台和openclaw交互,我选择j最后一项:skip for now。到下面这一步,可以通过键盘的左箭头选择Yes.

mahailiang的专栏 344

RH850从0搭建Autosar开发环境系列讲解 - 总目录

Davinci Autosar实战开发从0构建开发能力。OS,COM,DCM,BSWMM,ECUM,VLINK,XCP,MEMMAP等模块配置,带你熟悉运行的autosar代码,包括MICROSAR的启动运行,使用GreenHills生成运行的hex。

weixin_42412049的博客 1万+

Leetcode-34 在排序数组中查找元素的第一个和最后一个位置 ----二分查找 python3

Leetcode-34 [Find First and Last Position of Element in Sorted Array] 在排序数组中查找元素的第一个和最后一个位置 Companies 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 ar

weixin_42252533的博客 134

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣算法 Java 刷题笔记【数组篇 二分搜索】hot100(一)二分查找、搜索插入位置、在排序数组中查找元素的第一个和最后一个位置 3

文章目录 1. 二分查找(简单) 2. 搜索插入位置(简单) 3. 在排序数组中查 找元素的第一个和最后一个位置(中等)

心海非海_のBlog 1741

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

有一位大佬解释到说不管别的,就找相等的值就可以了,这样的话我就用两次二分查找不就好了吗?其实到这里就结束了,细心的小伙伴会发现,诶,你这样的话,我只需要再加一个条件变量,去判断找的是左边界还是右边界不就只需要一个函数了吗?同理,当我想去寻找左边界的时候,我就把right=mid+1;如果我想找右边界,当我nums[mid]=target的时候,这个时候我要把left = mid+1;区间的定义就是不变量,那么在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则!加油,然后再用C语言实现一下。

2501_92566074的博客 165

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

8. <tag-数组和二分查找_1>-lt.704-二分查找 + lt.33-搜索旋转排序数组 +lt.34-在排序数组中查找元素的第一个和最后一个位置 + lt.35-搜索插入位置 2.3

lt.704 二分查找 [案例需求] [思路分析] 二分法典型例题, 有什么好说的, 我秒了 [代码实现]

菜菜的大数据开发の路 586

手撕3_二分查找_在排序数组中查找元素的第一个和最后一个位置

【代码】手撕3_在排序数组中查找元素的第一个和最后一个位置。

qq_41958859的博客 181

数组:二分查找

LeetCode704. 二分查找 https://leetcode-cn.com/problems/binary-search/ 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 思路 这道题目中的数组是有序数组,这也是使用二分查找的基础条件。只

qq_44781747的博客 612

二分查找 (1)

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

qq_46703808的博客 562

Leecode-34(二分查找)

DAY 3 leecode-34:在排序数组中查找元素的第一个和最后一个位置 tag:二分查找 给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置 算时间复杂度要求O(log n)级别 如果数组中不存在目标值,返回[-1,-1] 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4] 示例 ...

weixin_42417298的博客 396

【Leetcode每日一题】34. 在排序数组中查找元素的第一个和最后一个位置(二分、lower_bound、upper_bound)

Leetcode 每日一题 题目链接: 34. 在排序数组中查找元素的第一个和最后一个位置 难度: 中等 解题思路: 这道题题意很明显,就是二分查找。即为C++中的 lower_bound 和 upper_bound 函数。这里给出python3的版本。 题解: class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: if len(nums) == 0:

YancyKahn 494

【LeetCode】在排序数组中查找元素的第一个和最后一个位置【三次二分】

给定一个按照升序排列的整数数组 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],...

Y先森0.0 112

【优选算法 & 二分查找】二分查找算法模板详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

【优选算法 — 二分查找算法】二分查找算法

OuO-1 的博客 2879

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

本篇文章仅是作为小白的我的一些理解,,如果有错误的地方,希望大佬们指出。34. 在排序数组中查找元素的第一个和最后一个位置以上就是我对于在排序数组中查找元素的第一个和最后一个位置的理解。!!

li209779的博客 1279

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

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

Bitdancing的专栏 4004

【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置

二分查找左右边界算法原理,模板总结,以“在排序数组中查找元素的第一个和最后一个位置”为例

BinaryWiker的博客 2292

LeetCode题解:在排序数组中查找元素的第一个和最后一个位置

本文是二分查找-模版III 的第一题,后面的几道题的也算是本模版的微调版,加油~

余光的博客 3945
上一篇: 二分查找----2.搜索二维矩阵
下一篇: 二分查找----4.搜索旋转排序数组
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值