@@ -395,6 +395,93 @@ int binarySearch(int[] nums, int target){
395395 return ... ;
396396}
397397```
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+ ```
398485| No. | Title | Solution | Difficulty | Time | Space | Topic |
399486| -------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------ :| :---------------------------------------------------------------------------------------------- :| ------------ | -------------------------------------- - | ------------------------------ - | -------------- - |
400487| [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