在旋转数组中查找元素

题目

给定一个无重复元素的数组 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
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。