news 2026/5/23 22:09:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在排序数组中查找元素的第一个和最后一个位置

题目描述

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

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

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

解题思路:

class Solution { public int[] searchRange(int[] nums, int target) { int[] res = new int[]{-1,-1}; int left = 0; int right = nums.length-1; while(left <= right){ int temp = (left + right) >> 1; if(nums[temp] > target){ right = temp - 1; }else if(nums[temp] < target){ left = temp + 1; }else{ left = temp; right = temp; while((right <nums.length-1)&&(nums[right] == nums[right+1])){ right++; } while((left > 0)&&(nums[left] == nums[left-1])){ left--; } res[0] = left; res[1] = right; } } return res; } }

这是最朴素的思想,二分查找,如果找到了再往两边拓展,处理边界条件,只可惜超时了。

需要对二分法再进行二分查找。

官方题解:

class Solution { public int[] searchRange(int[] nums, int target) { int leftIdx = binarySearch(nums, target, true); int rightIdx = binarySearch(nums, target, false) - 1; if (leftIdx <= rightIdx && rightIdx < nums.length && nums[leftIdx] == target && nums[rightIdx] == target) { return new int[]{leftIdx, rightIdx}; } return new int[]{-1, -1}; } public int binarySearch(int[] nums, int target, boolean lower) { int left = 0, right = nums.length - 1, ans = nums.length; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] > target || (lower && nums[mid] >= target)) { right = mid - 1; ans = mid; } else { left = mid + 1; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 9:30:21

Kotaemon林业资源查询AI助手上线

Kotaemon林业资源查询AI助手上线 在林业管理部门的日常工作中&#xff0c;一个基层工作人员可能需要反复查阅十几份PDF文件、登录多个系统才能回答“某林区近五年天然林面积变化趋势”这样的问题。信息分散、专业门槛高、流程繁琐——这些痛点长期制约着林业公共服务的效率与质…

作者头像 李华
网站建设 2026/5/15 12:07:36

vue+springboot电子商务商品销售平台的设计与实现_i6h9j4ec_论文

目录 已开发项目效果实现截图开发技术介绍系统开发工具&#xff1a; 核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式…

作者头像 李华
网站建设 2026/5/23 15:40:27

Python大数据技术的基于机器学习的智能学习辅导系统开发_068uvf15_论文

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 Python_68uvf15_ 论文大数据技术的基于机器学习的智能学习辅导系统开发 项目简…

作者头像 李华
网站建设 2026/5/22 19:00:10

EmotiVoice开源TTS引擎在有声内容创作中的应用

EmotiVoice开源TTS引擎在有声内容创作中的应用 在有声书、游戏配音和虚拟偶像日益普及的今天&#xff0c;听众不再满足于“能说话”的AI语音——他们想要的是会呼吸、带情绪、有性格的声音。然而&#xff0c;传统文本转语音&#xff08;TTS&#xff09;系统常常陷入“机械腔”困…

作者头像 李华
网站建设 2026/5/22 14:03:45

7、Linux 进程管理与操作全解析

Linux 进程管理与操作全解析 1. 基础函数与文件操作 在 Linux 环境下,有几个基础函数用于处理文件相关操作。代码如下: function TdBaseFileReader.NumberTodBaseNumber(Value: double; Prec, DecPrec: integer; WriteNull: boolean): string; begin if WriteNull then R…

作者头像 李华