美文网首页
在旋转数组中查找元素

在旋转数组中查找元素

作者: Go语言由浅入深 | 来源:发表于2022-02-03 12:18 被阅读0次

    题目

    给定一个无重复元素的数组 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
    }
    

    相关文章

      网友评论

          本文标题:在旋转数组中查找元素

          本文链接:https://www.haomeiwen.com/subject/nxvdkrtx.html