@@ -395,6 +395,93 @@ int binarySearch(int[] nums, int target){
395
395
return ... ;
396
396
}
397
397
```
398
+
399
+ ** 將搜尋區間全部統一成兩端都閉** , 方便記憶
400
+
401
+ ```go
402
+ func Search(nums []int , target int ) int {
403
+ lenght := len (nums)
404
+ if lenght <= 0 {
405
+ return - 1
406
+ }
407
+ left, right := 0 , lenght- 1
408
+
409
+ for left <= right {
410
+ mid := (right- left)/ 2 + left
411
+ if nums[mid] == target {
412
+ return mid
413
+ } else if nums[mid] < target {
414
+ // 找右邊
415
+ left = mid + 1
416
+ } else if nums[mid] > target {
417
+ // 找左邊
418
+ right = mid - 1
419
+ }
420
+ }
421
+ // 都沒找到
422
+ return - 1
423
+ }
424
+
425
+ // 有點類似 nums 小於 target的元素有幾個
426
+ func LeftBound(nums []int , target int ) (index int ) {
427
+ lenght := len (nums)
428
+ if lenght <= 0 {
429
+ return - 1
430
+ }
431
+ left, right := 0 , lenght- 1
432
+
433
+ for left <= right {
434
+ // 除以2
435
+ // mid := left + (right- left)>> 1
436
+ mid := int (uint(right+ left) >> 1 )
437
+ if nums[mid] == target {
438
+ // 要繼續找左邊, 所以把右邊變小
439
+ right = mid - 1
440
+ } else if nums[mid] < target {
441
+ // 找右邊
442
+ left = mid + 1
443
+ } else if nums[mid] > target {
444
+ // 找左邊
445
+ right = mid - 1
446
+ }
447
+ }
448
+ // 都沒找到 注意: left越界情況
449
+ if left >= lenght || nums[left] != target {
450
+ return - 1
451
+ }
452
+ return left
453
+ }
454
+
455
+ // 有點類似 nums 大於 target的元素有幾個
456
+ func RightBound(nums []int , target int ) (index int ) {
457
+ lenght := len (nums)
458
+ if lenght <= 0 {
459
+ return - 1
460
+ }
461
+ left, right := 0 , lenght- 1
462
+
463
+ for left <= right {
464
+ // 除以2
465
+ // mid := left + (right- left)>> 1
466
+ mid := int (uint(right+ left) >> 1 )
467
+ if nums[mid] == target {
468
+ // 注意:要繼續找右邊, 所以把左邊變大=mid+ 1
469
+ left = mid + 1
470
+ } else if nums[mid] < target {
471
+ // 找右邊
472
+ left = mid + 1
473
+ } else if nums[mid] > target {
474
+ // 找左邊
475
+ right = mid - 1
476
+ }
477
+ }
478
+ // 都沒找到 注意:right越界情況
479
+ if right < 0 || nums[right] != target {
480
+ return - 1
481
+ }
482
+ return right
483
+ }
484
+ ```
398
485
| No. | Title | Solution | Difficulty | Time | Space | Topic |
399
486
| -------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------ :| :---------------------------------------------------------------------------------------------- :| ------------ | -------------------------------------- - | ------------------------------ - | -------------- - |
400
487
| [0704 ](https:// kimi0230.github.io/ LeetcodeGolang/ Leetcode/ 0704. Binary- Search/ ) | [704 . Binary Search](https:// leetcode.com/ problems/ binary- search/ ) | [Go](https:// github.com/ kimi0230/ LeetcodeGolang/ tree/ master/ Leetcode/ 0704. Binary- Search) | Easy | 最差:O(long n)< br> 最佳O(1 )剛好在中間 | 迭代: O(1 ) < br/ > 遞迴O(log n) | Binary Search |
0 commit comments