坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day11
搜索旋转排序数组
- 题目描述
- 解题思路
- 单独开一个函数来判断是否被染成蓝色
- 以与最后一个元素的大小比较来确定在哪个段上
- 分类讨论target、nums[key]、end的大小情况,来确定此处(nums[key])是否为蓝色
- 单独开一个函数来判断是否被染成蓝色
- 代码参考
func is_blue(nums []int, target int, key int) bool{end := nums[len(nums)-1]if nums[key] > end{return (target <= nums[key]) && (target > end)}else{return (target <= nums[key]) || (target > end)}
}func search(nums []int, target int) int {// 开区间 (-1,n)left := -1right := len(nums)for left+1<right{mid := left + (right-left)/2if is_blue(nums,target,mid){right = mid}else{left = mid}}if right==len(nums) || nums[right] != target{return -1}return right
}
- tips
- 注意此处要取等号!
- target <= nums[key]
- is_blue函数的返回值为bool
- 注意此处开区间的范围是(-1,nums[n])
- 注意先判断返回值为-1的情况(条件为:right==len(nums) || nums[right] != target)
- 注意此处要取等号!