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

Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: num... 阅读详情

1.题目

在这里插入图片描述

2.解法


class Solution {
    public int[] searchRange(int[] nums, int target) {
        int start = 0;
        int end = nums.length-1;
        int result[] = {-1,-1};
        if(nums.length==0) return result;

        int count = 0;
        while(start <= end) {
            int mid = start + (end-start)/2;
            if(nums[mid] == target) {
                // 先判断左边
                int tmp = mid;
                // 直到最左边
                while (tmp > 0 && nums[--tmp] == target) {}
                if (nums[tmp] == target) {
                    result[count++] = tmp;
                } else {
                    result[count++] = tmp + 1;
                }
                
                // 再判断右边
                tmp = mid;
                while (tmp < nums.length - 1 && nums[++tmp] == target) {
                }
                if (nums[tmp] == target) {
                    result[count] = tmp;
                } else {
                    result[count] = tmp -1;
                }
                break;
            }else if(nums[mid]< target){
                start = mid + 1;
            }else{
                end = mid-1;
            }
        }
       
        return result;
    }
}

时间复杂度为O(logn), 如果一个数字重复的次数很多的话,那么时间复杂度会变为O(n), 空间复杂度为O(1)

3.思考(可忽略)

这道题看看题解,很好~~

  1. 我忽略的最重要的一点是:
    @nums[i]==target时,左右两边都得判断,是否还有target
    我写的这个条件只满足,数组中只有两个重复数,并且mid-1、mid不在临界的情况

在这里插入图片描述
如果改为这样,条件满足了,但是执行语句不满足了,所以,只有左右两边同时判断才对,不能只走一条道

在这里插入图片描述
2、如果start = 0 , end = length的时候,条件为start < end, 因为前一个mid刚判断过。

3、临界条件一定要判断。

UDS服务应该支持哪些否定响应码 UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组: 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。 0x01 – 0x7F:诊断通信相关的否定响应码。 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定 阅读详情

相关推荐

C语言编写Picard迭代和牛顿迭代法

为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ...

mohenxiang的博客 4699

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

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

Bitdancing的专栏 4004

NVIDIA DGX Spark实战指南:从开箱到部署200B参数大模型

本文详细介绍了NVIDIA DGX Spark桌面AI超级计算机的开箱体验与实战部署指南。文章深入解析了其Grace Blackwell架构与128GB统一内存的核心优势,并逐步演示了从系统初始化、运行200B参数大模型到进行QLoRA微调的全过程。该设备将高达1 PetaFLOP的AI算力浓缩于桌面,为开发者和研究团队提供了本地化、高性能的AI开发与部署一体化解决方案。

weixin_29274969的博客 2240

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

Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/   本质上就是一个二分查找问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #inc

珍惜 7778

版图提取的spice网表中参数含义及二级效应STI/WPE

寄生电阻、寄生电容可以从版图提出的.sp文件中看, ad area of drain 面积 as area of source pd perimeter of drain 周长,PS PD周长都不计算与栅极接触的部分 ps perimeter of source nrd 漏扩散区等效方块数 nrs 源扩散区等效方块数 sa ...

qq_40007892的博客 6556

【蓝牙专题】HCI协议解析

一、概念: 很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller; 1、架构 如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上; HCI

蚂蚁的专栏 5070

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

这篇文章介绍了在排序数组中查找目标值起始和结束位置的二分查找算法。主要内容包括: 查找左边界时使用向下取整的中值计算,通过right=mid保留可能的左边界 查找右边界时使用向上取整的中值计算,通过left=mid保留可能的右边界 关键点说明:循环条件使用left<right避免死循环,查找左右边界时采用不同的中值计算方式 常见错误分析:展示了可能导致边界遗漏或死循环的错误写法 算法正确性验证:以[5,7,7,8,8,10]为例,详细演示了查找target=8的执行过程 比较了不同中值计算方式对算法性

2402_83315537的博客 1629

【WRF湿度调整策略】WRF/ERA5湿度数据对比

【WRF湿度调整策略】WRF/ERA5湿度数据对比

WW、forever的博客 121

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

题目要求在排序数组中查找目标值的起始和结束位置,若不存在则返回[-1, -1]。三种解法均基于二分查找找下界的思想:通过查找target的下界确定起始位置,查找target+1的下界确定结束位置。解法差异主要体现在循环条件和边界处理上:解法一使用经典二分循环条件l<=r,解法二改为l<r,解法三采用开区间处理l+1<r。三种方法的时间复杂度均为O(log n),解法二和解法三在边界处理上更简洁直观。

大家好,我是千楼,全栈开发工程师,分享日常学习和工作,记录成长~~~ 1083

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1034

OpenLayers6入门,快速搭建Vue+OpenLayers地图脚手架项目

本章针对Vue初学者,对Vue不熟悉,甚至还不会Vue的入门学生读者。本章会详细讲解从环境到环境的各个步骤,再到使用脚手架快速生成项目,以及添加地图库依赖,编写简单的高德地图显示页面的。如果已有VUE项目或者熟悉VUE的读者可以不用看本章,直接添加ol依赖到VUE项目中即可。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 5441

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

LeetCode 34 在排序数组中查找元素的第一个和最后一个位置题目描述思路代码 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 思路 思路非常简单,就是单纯的二分查找,如果在数组中找到一个数和目标数相同,就在此位置向...

weixin_37905795的博客 220

YOLOv11涨点改进 | 检测头Head改进篇 | 利用DynamicConv高效动态卷积改进YOLOv11检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

本文提出了一种基于动态卷积(DynamicConv)的YOLOv11检测头改进方法v11Detect_DyHead。该方法通过引入多专家机制和动态权重调整,在增加参数量的同时保持较低计算复杂度,有效解决了低FLOPs模型难以从大规模预训练中获益的问题。文章详细介绍了DynamicConv模块的原理和实现,包括其参数高效特性、多专家机制和动态权重生成方式。同时提供了完整的代码实现和添加该模块的具体步骤,并给出了相应的YAML配置文件。实验表明,该方法在保持较低计算开销的同时显著提升了模型性能,适用于视觉和语言

Ai缝合怪、助力小伙伴高效发论文 537

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

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

li209779的博客 1279

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

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

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

LeetCode 34在排序数组中查找元素的第一个和最后一个位置 题目简述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4] 输入:nums = [5,7,7,8,8,10], target = 6 输出:[-1,-1...

XBlog 250

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

问题要求在一个升序排序的数组。

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1404

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

题目 34. 在排序数组中查找元素的第一个和最后一个位置 https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/ 题解 二分查找 先用二分查找找到目标值第一个所在的位置,然后再用二分查找,找到目标值最后一个所在位置。 第一个所在值的查找逻辑: 1 如果nums[mid] 等...

RAYFUXK的专栏 534

leetcode34在排序数组中查找元素的第一个和最后一个位置

leetcode34在排序数组中查找元素的第一个和最后一个位置 要求:在排序数组中查找元素的第一个和最后一个位置 时间复杂度:olg(n) 解法:这个题可以用二分搜索来做,分别搜索出最左边的元素和最右边的元素 //在排序数组中查找元素的第一个位置和最后一个位置 public static int[] searchRange(int[] nums, int target) { ...

LiuRenyou的博客 513

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

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

阿玮的博客 263

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

leetcode34—在排序数组中查找元素的第一个和最后一个位置 题意简述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,...

Again的博客 267

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

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

weixin_44575373的博客 167

LeetCode第 34 题:在排序数组中查找元素的第一个和最后一个位置(C++)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode) 就是二分查找的变体,感觉跟简单题差不多: 数据结构与算法之美:16 | 二分查找(下) 这儿怎么找都行,那就找第一个等于target的位置吧: class Solution { public: int bsearch(vector<int> &nums, int low, int high, int target){ while(low <= high){

zj 283

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

[LeetCode] 34. 在排序数组中查找元素的第一个和最后一个位置(java实现)二分1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路(二分): 二分的核心是找出一个分界点,如果左右两段有不同的性质,二分就能给它找出来。 解题思路: 用二分找出第一个target—if(nums[mid] >= target) 再用二分找出第二个target—if(nums[mid]

cloud的博客 380

[leetcode 34.] 在排序数组中查找元素的第一个和最后一个位置

在排序数组中查找元素的第一个和最后一个位置分析常见的二分法是这样的左闭右闭区间 `[left,right]`左闭右开区间 `[left,right)`左边第一次出现的目标值左闭右开区间 `[left,right)`左闭右闭区间 `[left,right]`右边第一次出现的目标值左闭右开区间 `[left,right)`左闭右闭区间 `[left,right]`程序代码 分析 看到排序数组,我们...

duchenlong的博客 312

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

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

lyd1995的博客 256

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

二分查找法-LeetCode第34题:在排序数组中查找元素的第一个和最后一个位置题解前言题目描述分析代码运行结果 前言 ……还是一个学生,做题解只是个人记录,代码有不少错误或纰漏之处,还望多多包涵。 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target =

oreki_lingxin的博客 1273
上一篇: 33. 搜索旋转排序数组
下一篇: 36.有效的数独
念殊15
博客等级 码龄8年 17粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值