当前位置: 首页 > 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.jsqmd.com/news/108103/

相关文章:

  • Python大数据技术的全国降水分析可视化系统的设计与实现_u5yzx5cx_c033
  • Kotaemon权限控制系统设计满足企业合规要求
  • Python大数据技术的基于Hadoop的健康饮食推荐系统的设计与实现_5578bn9k_yh025
  • Kotaemon自动化测试框架搭建经验谈
  • Kotaemon在法律咨询机器人中的实际应用效果
  • Qt实现多语言原理和实践详解
  • 1、Linux API 与 Kylix 开发全解析
  • EmotiVoice语音输出格式支持说明(WAV/MP3/PCM)
  • 构建高精度问答系统,Kotaemon是怎么做到的?
  • 2、探索 Linux API 与 Kylix 开发的奥秘
  • 3、深入探索Linux API:错误处理与特性对比
  • 句句戳笑点!专治不会夸人的你
  • 脑洞大开!10 个嘎嘎搞笑的老公专属备注
  • 从文本到情感语音:EmotiVoice的技术实现路径
  • Kotaemon多租户支持能力曝光,适用于SaaS场景
  • 取一个奶奶辈的微信昵称[特殊字符],好听到爆
  • EmotiVoice语音合成引擎的架构设计与原理剖析
  • 基于Java Swing的路径寻路算法可视化演示程序(2)
  • 经典场景设计方案系列---【分布式事务】
  • 基于Java Swing的路径寻路算法可视化演示程序(1)
  • jetson jetpack从5.0.1更新到6.1的步骤
  • 37、Python实用示例集:DNS管理、LDAP使用与日志处理
  • 38、Python编程:从基础到高级应用的全面指南
  • 30、Python并发编程:线程、进程与调度的全面指南
  • 32、深入探索 Django:构建 Web 应用与数据库应用
  • 44、基于 Pthreads 的多线程编程基础
  • 33、Python 数据持久化与简单序列化方法
  • OpenAI推出GPT Image 1.5模型加速图像生成竞争
  • Kotaemon招聘面试官AI助理功能演示
  • 生日祝福语音定制服务商业模式探讨