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

博客围绕LeetCode题目展开,介绍了解题思路,包括复制原数组反向排序找目标位置,以及使用二分查找法确定目标位置并向两边扩展。还给出了代码实现,有利用API的简洁方式和二分查找的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述

在这里插入图片描述

二、解题思路

  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]
  }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值