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

news2025/1/16 3:44:10

目录

问题描述

代码解决以及思想 

知识点 


问题描述

代码解决以及思想 

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int left = 0;                      // 定义左边界
        int right = nums.size() - 1;       // 定义右边界

        while (left <= right) {            // 当左边界小于或等于右边界时,执行循环
            int middle = left + (right - left) / 2;  // 计算中间位置,避免整数溢出

            if (nums[middle] == target) {   // 如果中间元素等于目标
                int start = middle;         // 初始化起始和结束索引为中间索引
                int end = middle;

                // 向左搜索边界
                while (start > 0 && nums[start - 1] == target) {
                    start--;  // 向左移动起始索引,直到不再与目标相等
                }

                // 向右搜索边界
                while (end < (nums.size() - 1) && nums[end + 1] == target) {
                    end++;    // 向右移动结束索引,直到不再与目标相等
                }
                return {start, end};  // 返回搜索到的左右边界
            }
            else if (nums[middle] > target) {
                right = middle - 1;        // 目标在左半部分,更新右边界
            }
            else {
                left = middle + 1;         // 目标在右半部分,更新左边界
            }
        }

        return {-1, -1};  // 如果未找到目标元素,返回{-1, -1}表示未找到
    }
};
  1. 初始化左边界 left 为数组的起始位置(0),右边界 right 为数组的结束位置(nums.size() - 1)。

  2. 进入一个循环,只要左边界 left 不大于右边界 right,就执行以下操作:

    a. 计算中间位置 middle,这是为了进行二分查找,以避免整数溢出。

    b. 如果 nums[middle] 等于目标元素 target,则表示找到了目标元素,然后开始搜索其范围。

    c. 初始化 startendmiddle,然后向左和向右搜索边界:

    • 向左搜索边界 start,通过不断将 start 减小直到不再与目标元素相等。
    • 向右搜索边界 end,通过不断将 end 增加直到不再与目标元素相等。

    d. 返回搜索到的左右边界,它们代表了目标元素在数组中的范围。

  3. 如果在循环中找到目标元素,则会在适当的时候返回搜索到的范围。

  4. 如果未找到目标元素,循环结束后,返回 {-1, -1},表示未找到目标元素。

知识点 

        进行二分查找以找到目标元素,然后在找到目标元素后,继续向左和向右搜索以确定它的范围。对于二分查找的内容可以看看下面的链接:

82.二分查找-CSDN博客

写在最后:以上就是本篇文章的内容了,感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务之负载均衡使用场景

在如见常见微服务系统中&#xff0c;负载均衡组件是一种将流量分配到多个服务的技术&#xff0c;目的是提高系统的性能和可用性。负载均衡有两种常见的模式&#xff1a;服务端模式和客户端模式。服务端模式使用独立的应用程序&#xff08;如 Nginx&#xff09;来转发请求&#…

HTML5+CSS3+JS小实例:交互式图片鼠标悬停景深对焦效果

实例:交互式图片鼠标悬停景深对焦效果 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport"…

木马免杀(篇三)静态免杀方法

紧接上一篇&#xff0c;是通过 cs 生成 shellcode 并直接用python 调用动态链接库执行 shellcode 。 生成后的exe文件未进行任何处理。 现在学习一些可以绕过静态免杀的方法。即将文件上传到目标不会被杀软查杀&#xff0c;但这只是静态方面。 动态免杀方面还涉及到很多东西&…

七、W5100S/W5500+RP2040树莓派Pico<UDP 组播>

文章目录 1. 前言2. 相关简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. UDP 组播回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 UDP组播是一种基于UDP协议的通信方式&#xff0c;它允许一台计算机通过发送单…

怎么解决气膜场馆噪音太大的问题?

近年来&#xff0c;多功能声学综合馆作为一种创新的建筑解决方案&#xff0c;有效地解决了传统气膜馆内部噪音问题。传统气膜馆由于其特殊结构和材料特性&#xff0c;常常受到噪音扩散和反射问题的困扰&#xff0c;影响了人们的听觉体验和活动效果。而多功能声学综合馆凭借声学…

Web - Servlet详解

目录 前言 一 . Servlet简介 1.1 动态资源和静态资源 1.2 Servlet简介 二 . Servlet开发流程 2.1 目标 2.2 开发过程 三 . Servlet注解方式配置 ​编辑 四 . servlet生命周期 4.1 生命周期简介 4.2 生命周期测试 4.3 生命周期总结 五 . servlet继承结构 5.1 ser…

Qt Concurrent框架详解(QFuture、QFutureWatcher)

1.概述 Qt Concurrent是Qt提供的一个并发编程框架&#xff0c;用于简化多线程和并行计算的开发。它提供了一组易于使用的函数和类&#xff0c;可以方便地在多线程环境下处理并发任务。 有以下特点&#xff1a; 简单易用&#xff1a;Qt Concurrent提供了一组高级函数和类&…

开关电源绝缘阻抗的检测标准是什么?如何测试绝缘阻抗性能?

绝缘阻抗测试是开关电源测试的一种重要方法&#xff0c;用来检测电气设备接线中断路和线路接触阻抗。用开关电源测试系统测试绝缘阻抗值保证结果准确性&#xff0c;评估绝缘阻抗性能&#xff0c;判断开关电源质量是否良好&#xff0c;从而保证开关电源的稳定性和可靠性。 怎么测…

论文研究中数据获取与查询

数据分析是写论文中一个非常重要的环节&#xff0c;特别是对于与经济相关专业的学子来讲&#xff0c;在写论文时避免不了需要案例分析&#xff0c;这时候数据分析就在其中显得尤为重要。 但是我们通常怎么获取这些数据呢&#xff1f; 下面给大家推荐几个能用得上的数据查询网站…

2023年10月28日历史上的今天大事件早读

1372年10月28日《水浒传》的作者施耐庵逝世 1818年10月28日俄国作家屠格涅夫诞辰 1886年10月28日法国送给美国的自由女神像揭幕 1894年10月28日现代著名作家叶圣陶出生 1902年10月28日马克思第一次被介绍给国人 1940年10月28日意军开始入侵希腊 1945年10月28日赵树理发表…

腾讯新专利,微信聊天终于可以加密/隐藏了!

随着互联网技术的发展&#xff0c;个人信息被倒卖、聊天记录泄露等情况时有发生&#xff0c;让人们不得不警惕慎言。 为了解决这个问题&#xff0c;腾讯最近获得了一项专利&#xff1a;据了解&#xff0c;该项专利名为“聊天消息的显示方法、发送方法、装置、电子设备及介质”。…

亲手教你WebUI自动化框架从零开始搭建

一、设计思路 PO模式 对象库层&#xff1a;二次封装Selenium的方法。 core&#xff1a;主要封装driver方法&#xff0c;并加入日志、失败截图 页面操作层(逻辑层)&#xff1a;元素对象和元素操作的封装。page&#xff1a;封装页面的元素对象和元素操作 业务层&#xff1a;测试…

零信任安全模型和多因素身份验证:提升网络安全的关键一步

近年来&#xff0c;随着疫情的蔓延和科技的飞速发展&#xff0c;数据和工作的数字化程度前所未有。这虽然为机会创造提供了更多空间&#xff0c;但也为潜在威胁行为者提供了新的入侵途径。因此&#xff0c;数据泄露的防范已经成为每个组织IT基础设施中不可或缺的一部分。 数据泄…

为什么SQL日志文件很大,该如何处理?

SQL Server 日志文件是记录所有数据库事务和修改的事务日志文件。用 SQL 术语来说&#xff0c;此日志文件记录对数据库执行的所有INSERT、UPDATE和DELETE查询操作。 如果数据库联机或恢复时日志已满&#xff0c;SQL Server 通常会发出 9002 错误。在这种情况下&#xff0c;数据…

苹果下载神器Folx2024

很多苹果电脑用户日常都会有下载东西的需求&#xff0c;不过Mac系统本身并不自带下载工具&#xff0c;我们只能使用浏览器本身的下载功能进行下载。但是很多时候浏览器的下载功能并不能满足我们的需求&#xff0c;速度也有限。 Folx2024最新版下载如下&#xff1a; https://w…

数据库开发软件Navicat Premium 15 mac中文软件介绍

Navicat Premium 15 mac是一款数据库开发工具&#xff0c;Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium for Mac软件介绍 Navicat premium是一款数据库管理工具。将此工具连接数…

手机怎么去水印?超级好用!

有些图片或视频中带有水印&#xff0c;这些水印可能会影响图片或视频的美观和视觉效果&#xff0c;或者可能会遮盖住部分内容。那么如何利用手机去除图片和视频水印呢&#xff1f;下面分别介绍了一些详细的操作步骤&#xff5e; 方法一&#xff1a;使用醒图APP去除图片水印 1、…

十二、W5100S/W5500+RP2040树莓派Pico<ARP 地址解析>

文章目录 1 前言2 简介2 .1 什么是ARP&#xff1f;2.2 ARP的优点2.3 ARP工作原理2.4 ARP应用场景 3 WIZnet以太网芯片4 ARP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着网络安全越来越受到重…

API管理神器:Apipost

在数字化时代&#xff0c;API已成为企业和开发者实现数据互通、应用集成的重要桥梁。然而&#xff0c;随着API数量的不断增加&#xff0c;API设计、调试、文档和测试等工作也变得越来越复杂。为了解决这一痛点&#xff0c;一款名为Apipost的API协同研发工具应运而生&#xff0c…

如何远程访问具有多个显示器的计算机

留出扩展空间对身体和电脑屏幕都有好处。许多人受益于使用多台显示器或将笔记本电脑连接到外接显示器以扩展屏幕。对于使用屏幕的人来说&#xff0c;拥有这样的屏幕空间可能意味着更高效的工作流程和生产力。 但是&#xff0c;如果你需要远程访问那台计算机呢&#xff1f;是否…