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

开发 前端
给定一个按照升序排列的整数数组 nums ,和一个目标值 target 。找出给定目标值在数组中的开始位置和结束位置。

[[432713]]

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

你的算法时间复杂度必须是 O(logn)级别。

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

示例 1:

  1. 输入: nums = [5,7,7,8,8,10], target = 8 
  2. 输出: [3,4] 

示例 2:

  1. 输入: nums = [5,7,7,8,8,10], target = 6 
  2. 输出: [-1,-1] 

解答一:findIndex、lastIndexOf

findIndex() 方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。

lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。

解答二:二分查找

  1. let searchRange = function(nums, target) { 
  2.     return [leftSearch(nums, target), rightSearch(nums, target)] 
  3.  
  4. let leftSearch = function(nums, target) { 
  5.     let low = 0,  
  6.         high = nums.length - 1, 
  7.         mid 
  8.     while (low <= high) { 
  9.         mid = Math.floor((low+high)/2) 
  10.         if (nums[mid] < target) { 
  11.             low = mid + 1 
  12.         } else if (nums[mid] > target) { 
  13.             high = mid - 1 
  14.         } else if (nums[mid] === target) { 
  15.             // 这里不返回,继续收缩左侧边界 
  16.             high = mid - 1 
  17.         } 
  18.     } 
  19.     // 最后检查 low 是否越界或命中 
  20.     if (low >= nums.length || nums[low] != target) 
  21.         return -1 
  22.     return low 
  23.  
  24.  
  25. let rightSearch = function (nums, target) { 
  26.     let low = 0,  
  27.         high = nums.length - 1, 
  28.         mid 
  29.     while (low <= high) { 
  30.         mid = Math.floor((low+high)/2) 
  31.         if (nums[mid] < target) { 
  32.             low = mid + 1 
  33.         } else if (nums[mid] > target) { 
  34.             high = mid - 1 
  35.         } else if (nums[mid] === target) { 
  36.             // 这里不返回,继续收缩右侧边界 
  37.             low = mid + 1 
  38.         } 
  39.     } 
  40.     // 最后检查 high 是否越界或命中 
  41.     if (high < 0 || nums[high] != target) 
  42.         return -1 
  43.     return high 

复杂度分析:

  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

 

leetcode:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

 

责任编辑:武晓燕 来源: 三分钟学前端
相关推荐

2021-12-13 11:31:36

排序数组数据结构算法

2024-03-18 09:50:18

Selenium元素Python

2020-11-13 07:08:51

Spring Boot应用Spring

2010-07-05 17:00:39

SQL server

2013-10-30 22:10:28

Clouda程序

2022-10-17 10:28:05

Web 组件代码

2021-04-07 13:38:27

Django项目视图

2023-09-21 22:43:17

Django框架

2021-08-26 07:43:44

vectorerase错误

2014-07-21 10:25:12

ENode开发论坛

2012-02-08 11:15:38

HibernateJava

2011-03-21 14:24:13

Debian 6

2010-07-30 14:58:06

Flex应用

2013-01-14 09:44:58

JavaScriptJSJS框架

2011-03-03 21:04:08

bug程序员

2011-06-24 13:38:32

QT 编译 安装

2021-11-02 08:00:00

机器学习API技术

2011-08-29 15:12:24

UbuntuLinux模块

2019-12-31 08:00:00

DebianLinuxApple Swift

2010-08-04 13:16:23

Flex项目
点赞
收藏

51CTO技术栈公众号