feat: Add Go code to binary search recursion under divide and conquer (#630)

* feat: Add Go code to binary search recursion under divide and conquer

* style: Code comment standardization

* style: modify function comment
This commit is contained in:
Hongyun Zhang 2023-07-20 18:57:28 +08:00 committed by GitHub
parent 30d1d36dd7
commit 4e4a13e1bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 0 deletions

View file

@ -0,0 +1,34 @@
// File: binary_search_recur.go
// Created Time: 2023-07-19
// Author: hongyun-robot (1836017030@qq.com)
package chapter_divide_and_conquer
/* 二分查找:问题 f(i, j) */
func dfs(nums []int, target, i, j int) int {
// 如果区间为空,代表没有目标元素,则返回 -1
if i > j {
return -1
}
// 计算索引中点
m := i + ((j - i) >> 1)
//判断中点与目标元素大小
if nums[m] < target {
// 小于则递归右半数组
// 递归子问题 f(m+1, j)
return dfs(nums, target, m+1, j)
} else if nums[m] > target {
// 小于则递归左半数组
// 递归子问题 f(i, m-1)
return dfs(nums, target, i, m-1)
} else {
// 找到目标元素,返回其索引
return m
}
}
/* 二分查找 */
func binarySearch(nums []int, target int) int {
n := len(nums)
return dfs(nums, target, 0, n-1)
}

View file

@ -0,0 +1,20 @@
// File: binary_search_recur_test.go
// Created Time: 2023-07-19
// Author: hongyun-robot (1836017030@qq.com)
package chapter_divide_and_conquer
import (
"fmt"
"testing"
)
func TestBinarySearch(t *testing.T) {
nums := []int{1, 3, 6, 8, 12, 15, 23, 26, 31, 35}
target := 6
noTarget := 99
targetIndex := binarySearch(nums, target)
fmt.Println("目标元素 6 的索引 = ", targetIndex)
noTargetIndex := binarySearch(nums, noTarget)
fmt.Println("不存在目标元素的索引 = ", noTargetIndex)
}