34. 在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置
题目描述:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
思路:
二分查找,找到后开始左、右找相同的数字
代码:
func searchRange(nums []int, target int) []int {
if nums == nil{
return []int{-1,-1}
}
l, r := 0,len(nums)-1
for l<=r{
mid := (r+l)/2
if nums[mid] == target{
l,r = mid-1,mid+1
for ;l>=0;l--{
if nums[l] != target{
break
}
}
for ;r<len(nums);r++{
if nums[r] != target{
break
}
}
break
}else if (nums[mid] > target){
r = mid-1
}else{
l = mid + 1
}
}
if l<r{
return []int{l+1,r-1}
}else{
return []int{-1,-1}
}
}
代码效率:
执行用时:4 ms, 在所有 Go 提交中击败了97.61%的用户
内存消耗:3.8 MB, 在所有 Go 提交中击败了100.00%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!