一、题目描述
二、解题思路
- 将原数组copy一份,反向排序,用
indexOf
找出原数组第一个target的位置和新数组第一个target的位置,对新数组target位置做一些处理后直接push到结果中。 - 二分查找法:先找出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]
}
};