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
35func 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