news 2026/4/16 12:32:52

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

作者头像

张小明

前端开发工程师

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/4/16 11:01:19

35、Unix与Perl编程:数据检查、求助途径与问题解决

Unix与Perl编程:数据检查、求助途径与问题解决 1. 数据检查的重要性 在处理数据序列时,有些字符绝不能出现在序列中。例如,字符 “X” 不能用来表示核苷酸,“J” 也不对应任何氨基酸。同样,如果下载了对应基因的 DNA 序列,这些序列的编码部分长度应该是三个核苷酸的倍数…

作者头像 李华
网站建设 2026/4/16 11:03:06

Kotaemon缓存机制优化揭秘:降低重复查询成本50%

Kotaemon缓存机制优化揭秘&#xff1a;降低重复查询成本50% 在当前大模型应用快速落地的浪潮中&#xff0c;企业对智能问答系统的期待早已超越“能答出来”的基础要求&#xff0c;转而追求高响应速度、低运营成本与强一致性的综合体验。然而&#xff0c;在典型的检索增强生成&a…

作者头像 李华
网站建设 2026/4/1 12:28:24

EmotiVoice语音合成中的停顿与重音控制技巧

EmotiVoice语音合成中的停顿与重音控制技巧 在智能语音助手、有声读物平台和虚拟偶像直播日益普及的今天&#xff0c;用户早已不再满足于“能说话”的机器语音。他们期待的是富有节奏感、带有情绪起伏、听起来像真人般自然的表达。然而&#xff0c;许多TTS系统仍停留在“逐字朗…

作者头像 李华
网站建设 2026/4/16 6:48:24

构建高精度问答系统,Kotaemon是怎么做到的?

构建高精度问答系统&#xff0c;Kotaemon是怎么做到的&#xff1f; 在企业级AI应用日益普及的今天&#xff0c;一个常见的痛点浮现出来&#xff1a;为什么我们的智能客服总是“答非所问”&#xff1f;明明接入了GPT-4这样的强大语言模型&#xff0c;却依然频繁出现编造答案、无…

作者头像 李华
网站建设 2026/4/11 23:42:54

Kotaemon自动化测试框架搭建经验谈

Kotaemon自动化测试框架搭建经验谈 在企业级智能对话系统日益复杂的今天&#xff0c;一个看似简单的用户提问——“我的年假还有几天&#xff1f;”——背后可能牵涉到自然语言理解、知识检索、权限校验、多轮交互管理甚至跨系统调用等多个环节。一旦其中某个模块出现偏差&…

作者头像 李华
网站建设 2026/4/14 2:15:55

Kotaemon在法律咨询机器人中的实际应用效果

Kotaemon在法律咨询机器人中的实际应用效果 在律师事务所的日常工作中&#xff0c;一个常见的场景是&#xff1a;客户反复咨询“租房违约怎么赔”“劳动仲裁时效多久”这类基础问题&#xff0c;耗费了大量初级律师的时间。而与此同时&#xff0c;AI聊天机器人又常常给出模棱两可…

作者头像 李华