File tree 1 file changed +47
-0
lines changed
docs/algorithm/research/binary-search
1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -488,6 +488,53 @@ func searchMatrix(matrix [][]int, target int) bool {
488
488
}
489
489
```
490
490
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
+
491
538
## 153. 寻找旋转排序数组中的最小值
492
539
493
540
[ 原题链接] ( https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/ )
You can’t perform that action at this time.
0 commit comments