【LeetCode每日一练】34. 在排序数组中查找元素的第一个和最后一个位置(中等|JS)

一、题目描述

在这里插入图片描述

二、解题思路

  1. 将原数组copy一份,反向排序,用indexOf找出原数组第一个target的位置和新数组第一个target的位置,对新数组target位置做一些处理后直接push到结果中。
  2. 二分查找法:先找出target所在位置,将left和high都设置为target的位置,然后在往两边找,找到第一个值不等于target为止。

三、代码实现

1.API侠

var searchRange = function(nums, target) {
    
    
  let tempArr = nums.concat()
  let res = []
  const len = nums.length
  tempArr.reverse()
  res.push(nums.indexOf(target))
  res.push(len - 1 - tempArr.indexOf(target))
  return res
};

后来发现还有个api叫lastIndexOf()…那么就可以一行解决

var searchRange = function(nums, target) {
    
    
    return [nums.indexOf(target),nums.lastIndexOf(target)]
};

年轻人不讲武德
2. 二分查找

var searchRange = function(nums, target) {
    
    
  let low = 0
  let high = nums.length - 1
  while (low <= high) {
    
    
    let mid = Math.ceil((low + high) / 2)
    if (target === nums[mid]) {
    
    
      low = mid
      high = mid
      break
    }
    if (target < nums[mid]) {
    
    
      high = mid - 1
    } else if (target > nums[mid]) {
    
    
      low = mid + 1
    }
  }
  if (low > high) {
    
    
    return [-1, -1]
  } else {
    
    
    while (nums[low - 1] === target) low--
    while (nums[high + 1] === target) high++
    return [low, high]
  }
};

猜你喜欢

转载自blog.csdn.net/weixin_40764047/article/details/110518997