81. 搜索旋转排序数组 II - 中等
xxxixxxx

81. 搜索旋转排序数组 II

81. 搜索旋转排序数组 II

二分法

  • 时间复杂度
    O(n) 大多情况下每次都减少一般的数据

  • 空间复杂度
    O(1)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    func search(_ nums: [Int], _ target: Int) -> Bool {
    if nums.isEmpty {
    return false
    }
    if nums.count == 1 {
    return nums[0] == target
    }
    var left = 0
    var right = nums.count - 1
    // [1, 2]
    // 必须是 >= 会存在 到最后左右指针相遇 才找到 目标值的情况
    while right >= left {
    let mid = (right - left) / 2 + left
    if nums[mid] == target {
    return true
    }
    if nums[mid] < nums[right] {
    if nums[mid] < target, target <= nums[right] {
    left = mid + 1
    } else {
    right = mid - 1
    }
    } else if nums[mid] > nums[right] {
    if nums[left] <= target, target < nums[mid] {
    right = mid - 1
    } else {
    left = mid + 1
    }
    } else {
    right -= 1
    }
    }

    return false
    }
  • Post title:81. 搜索旋转排序数组 II - 中等
  • Post author:xxxixxxx
  • Create time:2021-02-24 11:08:00
  • Post link:https://xxxixxx.github.io/2021/02/24/2000-014-81. 搜索旋转排序数组 II/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments