Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c413cb9

Browse files
🐱(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‎

Lines changed: 47 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /