题目
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
解决方法:变种二分查找,分两种情况:target在前面的有序部分;target在后面的有序部分:
func sortedSearch(nums []int, target int) int {
if len(nums) == 0 {
return -1
}
low, high := 0, len(nums)-1
for low <= high {
mid := low + (high-low)>>1
if nums[mid] == target {
return mid
} else if nums[mid] >= nums[low] { //target在前面的有序部分
if target >= nums[low] && nums[mid] >= target {
high = mid - 1
} else {
low = mid + 1
}
} else if nums[mid] <= nums[high] { //target在后面的有序部分
if target <= nums[high] && nums[mid] >= target {
high = mid - 1
} else {
low = mid + 1
}
}
}
return -1
}
网友评论