自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置

開(kāi)發(fā) 前端
給定一個(gè)按照升序排列的整數(shù)數(shù)組 nums ,和一個(gè)目標(biāo)值 target 。找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。

[[432713]]

給定一個(gè)按照升序排列的整數(shù)數(shù)組 nums ,和一個(gè)目標(biāo)值 target 。找出給定目標(biāo)值在數(shù)組中的開(kāi)始位置和結(jié)束位置。

你的算法時(shí)間復(fù)雜度必須是 O(logn)級(jí)別。

如果數(shù)組中不存在目標(biāo)值,返回 [-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() 方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。若沒(méi)有找到對(duì)應(yīng)元素則返回-1。

lastIndexOf() 方法返回指定元素(也即有效的 JavaScript 值或變量)在數(shù)組中的最后一個(gè)的索引,如果不存在則返回 -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.             // 這里不返回,繼續(xù)收縮左側(cè)邊界 
  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.             // 這里不返回,繼續(xù)收縮右側(cè)邊界 
  37.             low = mid + 1 
  38.         } 
  39.     } 
  40.     // 最后檢查 high 是否越界或命中 
  41.     if (high < 0 || nums[high] != target) 
  42.         return -1 
  43.     return high 

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(logn)
  • 空間復(fù)雜度:O(1)

 

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

 

責(zé)任編輯:武曉燕 來(lái)源: 三分鐘學(xué)前端
相關(guān)推薦

2021-12-13 11:31:36

排序數(shù)組數(shù)據(jù)結(jié)構(gòu)算法

2024-03-18 09:50:18

Selenium元素Python

2024-06-06 08:46:26

彈性布局元素瀏覽器

2020-11-13 07:08:51

Spring Boot應(yīng)用Spring

2010-07-05 17:00:39

SQL server

2021-08-26 07:43:44

vectorerase錯(cuò)誤

2011-03-03 21:04:08

bug程序員

2011-03-21 14:24:13

Debian 6

2013-01-14 09:44:58

JavaScriptJSJS框架

2010-07-30 14:58:06

Flex應(yīng)用

2012-02-08 11:15:38

HibernateJava

2021-04-07 13:38:27

Django項(xiàng)目視圖

2023-09-21 22:43:17

Django框架

2013-10-30 22:10:28

Clouda程序

2022-10-17 10:28:05

Web 組件代碼

2014-07-21 10:25:12

ENode開(kāi)發(fā)論壇

2019-12-31 08:00:00

DebianLinuxApple Swift

2011-06-24 13:38:32

QT 編譯 安裝

2010-03-15 10:37:46

Pthon腳本

2011-12-29 15:18:54

開(kāi)放平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)