蓝桥杯入门即劝退(十六)查找元素范围(双解法)

news2024/10/3 0:21:44

欢迎===关注===点赞===评论,共同学习,共同进步!

------持续更新蓝桥杯入门系列算法实例--------

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

前言:又到了好玩刺激的算法题了,由浅入深的讲解,才能对本道算法题发挥其作用,建议先自己思考做一遍,如果不对或有疑惑再来看题解。

->力扣链接 

一、题目描述

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

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

 

解题思路:1、按题意可知必须写一个时间复杂度为O(log n)的算法,如果不限定的话,直接遍历累加target数量返回下标就过于简单了。

2、我们使用二分查找可以满足时间复杂度的要求,这里先讲解一个简单版,便于理解。

【简易版】

1、新建一个result数组用于返回。

2、确定两个边界left、right为数组开头和结尾元素。

3、在两个指针相遇前分别进行遍历

4、分别可以获得第一个target下标和最后一个target下标

public int[] searchRange2(int[] nums, int target) {//简单解法,时间复杂度高
            int[] result = new int[] {-1, -1};//创建新数组用于返回
            int right = nums.length - 1;//右边界
            int left = 0;//左边界
            while (left <= right) {
                if (nums[left] == target && nums[right] == target) {
                    result[0] = left;//获得第一个target下标
                    result[1] = right;//最后一个target下标
                    break;
                }
                if (nums[left] < target) {//向左遍历
                    left++;
                }
                if (nums[right] > target) {//向右遍历
                    right--;
                }
            }
            return result;
        }

【进阶版】

1、进阶解法本质也是二分查找,通过两次左右边界的查找,来确定target的范围。

2、通过第一次查找左边界target位置。

3、通过查找target右边的一个元素位置,即间接的获得最后一个target的下标。

4、需满足左边界小于等于右边界,且右边界不超出数组长度,且两个边界值均为target。

public int[] searchRange(int[] nums, int target){
        if (nums.length==0)
            return new int[]{-1,-1};
        int LeftInd=BinarySearch(nums,target);//左边target下标
        int RightInd=BinarySearch(nums,target+1)-1;//右边界target下标
       if (LeftInd<=RightInd&&RightInd<=nums.length&&nums[LeftInd]==target&&nums[RightInd]==target)
            return new int[]{LeftInd,RightInd};
       else   return new int[]{-1,-1};
    }
    public int BinarySearch(int nums[],int target){
        int left=0;
        int right=nums.length;
        while (left<right){
            int mid=left+(right-left)/2;
            if (target<=nums[mid]){逐渐左移,找到最左边的target
                right=mid;
            }
            else  left=mid+1;
        }
        return left;//返回的是第一个target下标
    }

 

发文不易,恳请大佬们高抬贵手!


点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


评论:往来无白丁,是你我交流的的开始!


收藏:愿君多采撷,是大佬们对在下的赞赏!

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

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

相关文章

什么是制造业数字化转型?制造业数字化转型的核心与意义

对于生产制造企业来讲&#xff0c;当下如果不进行数字化转型的话&#xff0c;很大概率会被时代所抛弃的。为什么这么讲&#xff1f;因为在未来的很长一段时间&#xff0c;你可以充分了解到&#xff0c;数字化转型已然成为了制造业向前的主旋律。既然数字化势在必行&#xff0c;…

可以赚钱的副业项目,简单易上手兼职副业推荐

在当前的经济环境下&#xff0c;对每个人来说&#xff0c;仅仅依靠那点薪水生活是非常紧张的。为了改善你的生活&#xff0c;你需要找到其他赚钱的方法&#xff0c;在互联网上做兼职是一个不错的选择。 今天推荐几个普通人可以做的兼职副业&#xff0c;希望对大家有所帮助。 一…

微信公众号的文章可以修改几次?修改的步骤有哪些

许多小伙伴们在运营微信公众号的时候&#xff0c;可能会遇到过这些难题&#xff0c;在发布微信公众号之前检查没有检查好&#xff0c;导致有错字或者是错句。有的时候可能配图还会配错&#xff01; 今天伯乐网络传媒就给大家带来一些实用的东西&#xff0c;比如微信公众号可以…

深入理解 Python 的对象拷贝和内存布局

深入理解 Python 的对象拷贝和内存布局 前言 在本篇文章当中主要给大家介绍 python 当中的拷贝问题&#xff0c;话不多说我们直接看代码&#xff0c;你知道下面一些程序片段的输出结果吗&#xff1f; a [1, 2, 3, 4] b a print(f"{a } \t|\t {b }") a[0] 100…

微信小程序的自定义组件(1)

文章目录1. 自定义组件2. 组件样式3. 组件-数据、方法和属性4. 组件数据监听器5. 组件纯数据字段1. 自定义组件 Component(Object object) | 微信开放文档 (qq.com) 创建组件 在项目的根目录中&#xff0c;鼠标右键&#xff0c;创建components->test文件夹在新建的componen…

第十二章 计算学习理论

12.1 基础知识 计算学习理论研究的关于通过计算来进行学习的理论。即关于机器学习的理论基础&#xff0c;其目的是分析学习任务的困难本质&#xff0c;为学习算法提供理论保证&#xff0c;并根据分析结果指导算法设计。 12.2 PAC学习 计算学习理论中最基本的是概率近似正确&…

点击化学染料DBCO-PEG-CY7.5|Cyanine7.5-PEG-DBCO|花青素Cyanine7.5

​DBCO-PEG-CY7.5点击化学染料其中Cy7.5 (Cyanine 7.5) 是一种发近红外&#xff08;NIR&#xff09;荧光的花青素荧光染料。根据磺化与否&#xff0c;分为普通Cy7.5和磺化Cy7.5&#xff0c;但常常统称为Cy7.5。 Cy7.5的消光系数高&#xff0c;荧光也很亮&#xff0c;并且对pH不…

为什么很多人转行学习Web前端技术?

为什么很多人转行学习Web前端技术?不管你是工人阶层还是服务行业&#xff0c;是否想过转行IT&#xff0c;转行IT后肯定会选择一门编程语言进行深入学习&#xff0c;很多转行的人基础都不是太好&#xff0c;不是科班出身&#xff0c;甚至有的是专科乃至中专&#xff0c;前端的H…

cuda学习笔记3——cuda常用内存相关函数及其使用示例

cuda学习笔记3——cuda常用内存相关函数及其使用示例常用的GPU内存函数cudaMalloc()cudaMemcpy()cudaFree()代码示例常用的GPU内存函数 cuda程序将系统区分成host和device&#xff0c;二者有各自的memory。kernel可以操作device memory&#xff0c;为了能很好的控制device端内…

软件测试人员去外包公司待遇怎么样?外包薪资高吗?

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 可能…

Python基础-画图:matplotlib

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。 pylab神器&#xff1a;pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性&#xff0c;包括但不限于&#xff1a;坐标范围&#xff0c;axes标签字号…

ESP32 OTA

装好Arduino环境后&#xff0c;做了一个遥控小车&#xff1a; 1、uni-app 包装 nipplejs (Nipplejs by yoannmoinet)做了一个简单的摇杆&#xff0c;调用ESP32的WebServer接口&#xff0c;控制小车 2、ESP32 连上路由的WiFI&#xff0c;用WebServer开发了一个接口&#xff0c…

PG::Wpwn

nmap -Pn -p- -T4 --min-rate1000 192.168.225.123 nmap -Pn -p 22,80 -sCV 192.168.225.123 查看80端口的页面 尝试枚举路径 发现了/wordpress路径 使用wpscan扫描 wpscan --url http://192.168.225.123/wordpress/ -e ap 使用exploit-db搜索“social warfare” https:/…

我国原油期货行业趋势:消费量上升及鼓励政策落地 成交额将继续增长

原油期货是最重要的石油期货&#xff0c;世界上重要的原油期货合约有4个&#xff1a;纽约商业交易所&#xff08;NYMEX&#xff09;的轻质低硫原油即“西德克萨斯中质油”期货合约&#xff1b;迪拜商品交易所的高硫原油期货合约&#xff1b;伦敦国际石油交易所&#xff08;ICE&…

【AIOT】蓝牙调研

经典蓝牙模块&#xff08;BT&#xff09;&#xff1a;泛指支持蓝牙协议在4.0以下的模块&#xff0c;一般用于数据量比较大的传输&#xff0c;如&#xff1a;语音、音乐等较高数据量传输。经典蓝牙模块可再细分为&#xff1a;传统蓝牙模块和高速蓝牙模块。传统蓝牙模块在2004年推…

非零基础自学Golang 第8章 包管理 8.1 工作区

非零基础自学Golang 文章目录非零基础自学Golang第8章 包管理8.1 工作区8.1.1 工作区结构8.1.2 GOPATH8.1.3 GOROOT8.1.4 GOBIN第8章 包管理 对于大部分编程语言来说&#xff0c;代码包都是最有效的代码管理方式&#xff0c;Go语言也是使用包来管理代码的。如同其他语言一样&a…

WPF 3D 点光源学习

先画一个平面&#xff0c;物体具有黄色的材质&#xff1b;不添加灯光&#xff0c;显示如下&#xff0c; 加入一个点光源&#xff0c;位置(1,1,1)、颜色白色&#xff0c;如下&#xff0c;照亮了物体&#xff0c;看到物体的材质&#xff1b; 点光源是从斜上方照过来的&#xff0…

SSM框架+Layui框架基础业务逻辑(一)

1.获取验证码以及验证码变换 // 改变验证码图片function chageImg(){document.getElementById("captchaPic").src"/captcha/getCode?time"new Date().getTime()} import cn.hutool.captcha.LineCaptcha; import org.springframework.stereotype.Controll…

HCIP-Cloud+Service+DevOps+Engineer+V2.0第二章持续规划与设计

学习总结&#xff0c;思维导图整理&#xff0c;免费分享。侵权删除 本博文为HCIP-Cloud Service DevOps Engineer V2.0培训系列内容&#xff0c;[完整学习路径](https://education.huaweicloud.com/programs/ff24fd88-c9f3-4045-9ecd-94afb7eac6ba/about)&#xff1b; 想进一…

[附源码]Python计算机毕业设计公立医院绩效考核系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…