GO题解 | #二分查找-II#
二分查找-II
http://www.nowcoder.com/practice/4f470d1d3b734f8aaf2afb014185b395
go解题答案
- 时间复杂度O(n)
- 思路概括:首位指针遍历
- 思路核心:
1、首位指针做循环条件,middel做比较
2、找到后用一个for循环找到最靠前的索引func search( nums []int , target int ) int {
if len(nums)==0{
return -1
}
ans:=-1
start,end:=0,len(nums)-1 // 首位指针来做循环条件
for start<=end{
m:=start + (end-start)/2 //此写法不溢出
if target == nums[m]{
ans=m
break
}else if target < nums[m]{
end=m-1
}else {
start=m+1
}
}
// 因为会有重复,向前更新索引
for ans >= 1 {
if nums[ans-1] == target {
ans -= 1
} else {
break
}
}
return ans
}
如果有帮助请点个赞哦, 更多文章请看我的博客
题主背景
- 从业8年——超级内卷500Q技术经理——目前专注go和微服务架构