当前位置: 首页 > news >正文

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

题目描述

给你一个按照非递减顺序排列的整数数组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; } }
http://www.zskr.cn/news/119182.html

相关文章:

  • Kotaemon在法律咨询机器人中的实际应用效果
  • 构建高精度问答系统,Kotaemon是怎么做到的?
  • 脑洞大开!10 个嘎嘎搞笑的老公专属备注
  • 从文本到情感语音:EmotiVoice的技术实现路径
  • 基于Java Swing的路径寻路算法可视化演示程序(2)
  • 38、Python编程:从基础到高级应用的全面指南
  • 30、Python并发编程:线程、进程与调度的全面指南
  • 33、Python 数据持久化与简单序列化方法
  • Kotaemon招聘面试官AI助理功能演示
  • NVIDIA Nemotron3系列开放模型: 开启“Agentic AI“的“Linux时刻“
  • 机器学习入门:逻辑回归超详细学习笔记(含案例+代码)
  • EmotiVoice在语音聊天机器人中的共情能力体现
  • 高效GPU算力加持下,EmotiVoice语音生成速度提升5倍
  • EmotiVoice开源模型许可证说明与商业授权路径
  • 双指针-快慢指针(龟兔指针)
  • Kotaemon支持语音输入输出,拓展应用场景边界
  • EmotiVoice降低语音AI使用门槛
  • Kotaemon珠宝定制咨询服务流程
  • Kotaemon开源框架深度解析:模块化设计提升开发效率
  • leetcode2500 删除每行的最大值(Java)
  • EmotiVoice语音合成模型:为游戏NPC注入真实情感
  • Kotaemon助力法律咨询智能化:案例分析与实现步骤
  • 如何用EmotiVoice实现零样本声音克隆?技术深度解析
  • EmotiVoice语音合成中的多音字准确识别率提升
  • 低成本实现产品语音提示功能的新路径
  • 基于EmotiVoice的有声内容创作全流程指南
  • 技术时刻丨OceanBase企业版会话级SQL跟踪实操:DBMS_MONITOR(类Oracle 10046事件)
  • 无人机测绘技术专业:课程体系与就业方向的对应关系
  • 职业本科低空飞行器工程技术专业核心职业素养清单
  • Windows平台终极PDF工具:Poppler完整安装配置指南