java数据结构与算法刷题-----LeetCode34. 在排序数组中查找元素的第一个和最后一个位置

Java实现 LeetCode 34 在排序数组中查找元素的第一个和最后一个位置 在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: num... 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

文章目录

在这里插入图片描述

二分查找

解题思路:时间复杂度O( l o g 2 n log_2n log2​n),空间复杂度O( 1 1 1)
  1. 进行两遍二分查找,第一次先找到最左边的target
  2. 第二次找最右边的target
代码

在这里插入图片描述

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int lowerPos = findPos(nums, target, true);//找最左边的target
        if (-1 == lowerPos) return new int[] {-1, -1};//如果没找到,说明数组中没有target
        //如果找到左边的target
        int higherPos = findPos(nums, target, false);//前往找最右边的target
        return new int[] {lowerPos, higherPos};//返回答案
    }
    //findLower参数表示,当前是否找的是最左边的target,true表示找最左边的,false表示找最右边的
    public int findPos(int[] nums, int target, boolean findLower) {
        int left = 0, right = nums.length -1, targetPos = -1;
        while (left <= right) {
            int pos = left + ((right - left) >> 1);//二分查找
            if (nums[pos] > target) right = pos - 1;//如果当前值>target,就去pos左边找
            else if (nums[pos] < target) left = pos + 1;//如果比target小,去右边找
            else {//如果找到了target
                if (findLower) {//判断当前是否要找的是target中最左边的
                    right = pos - 1;//如果是,就去pos左边找最左边的target
                } else left = pos + 1;//如果不是就去右边找最右边的
                targetPos = pos;//保存找到的位置
            }
        }
        return targetPos;//返回找到的target值的位置
    }
    
}
LeetCode034——在排序数组中查找元素的第一个和最后一个位置 我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/description/ 题目描述: 知识点:二分搜索法 思路:floor函数和ceil函数 ... 阅读详情

相关推荐

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

不忘初心 方得始终 2984

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

LeetCode刷题顺序指南:参考代码随想录(),网站整理了leetcode刷题攻略,一个超级详细的刷题顺序,,只要按照顺序刷就可以了,左面的菜单栏就是刷题顺序,每一个专题,挨个刷就可以,不用自己再去题海里选题了!

weixin_46896210的博客 1110

告别手动调参!PSCAD 4.2的Multiple-Run功能,5分钟搞定交流故障批量仿真

本文详细介绍了PSCAD 4.2的Multiple-Run功能如何高效处理交流故障批量仿真,告别传统手动调参的低效模式。通过五步配置法,工程师可在5分钟内完成数百次参数组合的仿真,显著提升电力系统分析效率。文章还包含工业级应用案例和高级调试技巧,助力实现故障仿真的自动化与智能化。

weixin_42552716的博客 279

【Leetcode每日一题】34.在排序数组中查找元素的第一个和最后一个位置|二分求下标

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

Yaoyao2024的博客 1819

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 417

四足机器人如何用对抗运动先验(AMP)实现复杂地形行走?Unitree Go1实战解析

本文深入解析了四足机器人Unitree Go1如何通过对抗运动先验(AMP)算法实现复杂地形行走。AMP结合模仿学习与对抗训练,使机器人仅凭本体感知就能适应未知地形。文章详细介绍了AMP的核心架构、仿真训练工程实践以及在Unitree Go1上的部署优化方案,展示了其在极端地形下的卓越性能表现。

weixin_29050513的博客 330

【力扣刷题-数组篇】34. 在排序数组中查找元素的第一个和最后一个位置的思路和Java详细代码

找到之后直接开始左移,比如[1,2,2,2,3,4],找到nums[2] = 2,开始左移,while(mid>0 && nums[--mid] == target) result[0] = mid;它是直接在当前mid索引减1开始判断的,所以这个循环结束,mid会是0。然后while(mid

sunleo123的博客 1044

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1226

leetcode刷题记录(九十一)——34. 在排序数组中查找元素的第一个和最后一个位置

示例 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。target的值,右端点是第一个。

weixin_45994787的博客 1012

ESP32-IDF开发之旅 基础篇⑪ ESP-IDF 任务看门狗以及多核任务

本文介绍了ESP-IDF中的任务看门狗(TWDT)和多核任务管理。TWDT用于监控任务是否被挂起,可同时监视双核任务,通过定时喂狗机制检测任务阻塞。文中详细讲解了TWDT的配置方法、订阅流程及示例代码,并演示了如何触发和处理看门狗超时。针对ESP32双核特性,重点介绍了xTaskCreatePinnedToCore函数的使用,说明如何将任务绑定到指定核心(CPU0/CPU1)运行,并提供了多核任务创建的代码示例。这些机制对提高系统稳定性和优化多核性能至关重要。

单片机菜鸟哥的博客 268

一文速览:大模型语料构建与基础训练全流程实战指南

因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。

master_hunter的博客 1673

LeetCode算法日记 - Day 9: 二分查找、在排查数组中查找元素的第一个和最后一个位置

本文介绍了二分查找算法及其在有序数组中的应用。第一部分讲解基础二分查找,针对有序无重复数组,通过左右指针逐步缩小范围,时间复杂度O(logn)。第二部分解决在非递减数组中查找目标值起始和结束位置的问题,通过调整左右边界的查找策略:查找左边界时确保右边界不越界,查找右边界时确保左边界不越界。最后给出两种情况的Java实现代码,其中特别处理了mid计算方式防止死循环,并考虑了边界条件。

Miraitowa_cheems的博客 758

CloudCompare 二次开发(9)——半径滤波

基于PCL对CloudCompare软件进行二次开发,实现的算法功能是半径滤波

点云侠的博客 1401

【C++习题】18.二分查找算法_在排序数组中查找元素的第一个和最后一个位置

查找区间左端点的模板查找区间右端点的模板。

hlyd520的博客 1531

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

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

二当家的白帽子 1490

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

RAYFUXK的专栏 534

VC中sqlite的使用

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

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

摘要:LeetCode34要求在非递减数组中查找目标值的起始和结束位置,时间复杂度需为O(logn)。核心解法是通过二分法复用lowerBound函数:起始位置为第一个≥target的索引,结束位置为第一个≥(target+1)的索引减1。采用左闭右开区间实现lowerBound,代码简洁高效,避免边界问题。相比暴力遍历O(n)和传统双二分法,该解法更优,符合面试要求。需注意target不存在和边界情况的处理。

m0_64198455的博客 811

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

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

大白菜的博客 390

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

总的来说,这些方法利用二分查找高效地在排序数组中找到目标元素的第一个和最后一个位置。如果未找到该元素,则返回 [-1, -1]。如果第一个和最后一个位置之间有元素,则返回范围不包括它们。这段Java代码用于在排序数组中查找目标元素的第一个和最后一个位置。参考:代码随想录(做题顺序很重要,后续算法代码优先以这个题目顺序为主)更多内容欢迎关注我的Github(持续更新中,欢迎Star✨)请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。如果数组中不存在目标值。

weixin_43873121的博客 835

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

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

Again的博客 267

LeetCode34. 在排序数组中查找元素的第一个和最后一个位置 - Java & Go - 二分查找改进

文章目录LeetCode34. 在排序数组中查找元素的第一个和最后一个位置解法11 算法2 Java3 Go解法21 算法2 Java3 Go LeetCode34. 在排序数组中查找元素的第一个和最后一个位置 LeetCode34. 在排序数组中查找元素的第一个和最后一个位置 解法1 1 算法 算法 1.两次二分查找 2.第一次二分查找计算mid=(left + right) >> 1;,每次mid都偏向左边,可以保证找到的是第一个大于等于target的元素 3.第二次二分查找计算mid

暴风星云裂之我裂开了 404

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

3.如果target在数组内,其开始索引是leftBorder+1,结束索引是rightBorder-1,二者至少应该是相等的(target只有1个),此时(rightBorder-1)-(leftBorder+1)=0,这时应该返回{leftBorder+1,rightBorder-1}。综合考虑,只要判断(rightBorder-1)-(leftBorder+1)>=0就返回{leftBorder+1,rightBorder-1},其他情况都返回{-1,-1}2.在数组范围内,但是不存在于数组中。

qq_52980102的博客 450

LeetCode 034. 在排序数组中查找元素的第一个和最后一个位置 - 二分边界查找详解

题目描述:给定一个按非降序排列的整数数组 nums 和一个目标值 target,找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值,返回 [-1, -1]。要求时间复杂度尽量为 O(log n)。原题链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/难度等级:Medium相关标签:数组、二分查找、边界处理。

m0_52114506的博客 1010

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

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

lvhao123456789的博客 1212
上一篇: java数据结构与算法刷题-----LeetCode153. 寻找旋转排序数组中的最小值
下一篇: java数据结构与算法刷题-----LeetCode241. 为运算表达式设计优先级
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ydenergy_殷志鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值