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

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

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

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

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

image


核心思路:

要解决这个问题,我们可以分两步进行:首先找到目标值 target 在数组中的起始位置,然后找到结束位置。
由于数组是按照非递减顺序排列的,可以使用二分查找算法来实现这个目标,二分查找的时间复杂度为 O(log n)。

算法步骤:

  1. 查找起始位置:使用二分查找找到 target 的第一个出现位置。如果找不到,返回 [-1, -1]。

  2. 查找结束位置:在找到起始位置后,继续使用二分查找找到 target 的最后一个出现位置。

复杂度分析:

时间复杂度:O(logn)
由于查找起始位置和查找结束位置是两个独立的二分查找过程,每个过程的时间复杂度都是 O(logn)。
由于这两个过程是顺序执行的,总的时间复杂度是 O(logn)+O(logn)=O(logn)。

空间复杂度:O(1),只使用了常数额外空间来存储中间变量(如 left, right, mid 等)。因此,空间复杂度是 O(1)。

Java代码实现:

class Solution {public int[] searchRange(int[] nums, int target) {int[] result = {-1, -1};int left = 0, right = nums.length - 1;// 查找 target 的起始位置while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] >= target) {right = mid - 1;} else {left = mid + 1;}}// 检查是否找到 targetif (left < nums.length && nums[left] == target) {result[0] = left;// 查找 target 的结束位置left = 0;right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] <= target) {left = mid + 1;} else {right = mid - 1;}}result[1] = right;}return result;}
}
http://www.sczhlp.com/news/60010/

相关文章:

  • 工程认证网站的建设潜江资讯网手机版
  • 有本地服务器怎么做网站做财经类新闻的网站
  • 建设农垦网站wordpress数据恢复
  • 网站上传到空间上饶市住房城乡建设局网站
  • 百度收录网站怎么更改关键词商贸有限公司起名字
  • wordpress自动生成网站地图wordpress如何添加广告悬浮按钮
  • 北京做一个网站多少钱市场调研
  • 淘客网站必须备案么做网站所需的知识技能
  • 如何做网站栏目规划企业品牌战略策划
  • 洞头区网站建设收费基本的网站建设步骤
  • 联盟网站做任务ppt做书模板下载网站有哪些内容
  • test6 - post
  • 工作感受月记(202509月)
  • 【? ?】CF2102D Quartet Swapping
  • 移动网站做微信小程序wordpress 多站点 主题
  • 自建社区网站能源企业 网站建设
  • 广州制作企业网站网站上门备案
  • 企业免费网站优化服务济南网站建设伍际网络
  • 济南网站app开发的移动网站建设cnfg
  • 2025 SWPU-NSSCTF 秋季招新入门 where_is_shell
  • .网站链接策略三站合一网站
  • 奉新网站建设成都网络推广网站
  • php中英文网站源码全网最低价seo
  • 鸿基建设工程有限公司网站通州网站建设电话
  • 天津做网站优化价格网站开发进度控制计划表
  • 网站开发技术历史域名托管
  • 德邦物流公司现代物流网站建设与开发西宁做网站君博先进
  • 郑州响应式网站网站维护费用一年多少
  • 教育培训门户网站源码外国人可以在中国做网站吗
  • 汕头公司做网站中国北京出啥大事了