Skip to content

Commit c413cb9

Browse files
committed
🐱(research): 81. 搜索旋转排序数组 II
1 parent e72a75d commit c413cb9

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

docs/algorithm/research/binary-search/README.md

+47
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,53 @@ func searchMatrix(matrix [][]int, target int) bool {
488488
}
489489
```
490490

491+
## 81. 搜索旋转排序数组 II
492+
493+
[原题链接](https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/)
494+
495+
### 思路
496+
497+
划分出有序数组进行二分查找。
498+
499+
当出现重复元素时,即 `nums[left] == nums[mid] && nums[right] == nums[mid]`,无法判断数组哪侧有序,应从两端往中间缩短查找范围。
500+
501+
```go
502+
func search(nums []int, target int) bool {
503+
length := len(nums)
504+
left := 0
505+
right := length - 1
506+
507+
for left <= right {
508+
mid := (left + right) / 2
509+
if nums[mid] == target {
510+
return true
511+
}
512+
if nums[left] == nums[mid] && nums[right] == nums[mid] {
513+
left++
514+
right--
515+
} else if nums[left] <= nums[mid] {
516+
// 左侧更小
517+
// 左侧区间是否连续
518+
if target >= nums[left] && target < nums[mid] {
519+
right = mid - 1
520+
} else {
521+
left = mid + 1
522+
}
523+
} else {
524+
// 左侧更大
525+
// 右侧区间是否连续
526+
if target > nums[mid] && target <= nums[length - 1] {
527+
left = mid + 1
528+
} else {
529+
right = mid - 1
530+
}
531+
}
532+
}
533+
534+
return false
535+
}
536+
```
537+
491538
## 153. 寻找旋转排序数组中的最小值
492539

493540
[原题链接](https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/)

0 commit comments

Comments
 (0)