编辑代码

package main
import "fmt"
var arrs = []int{1,2,4,6,8,8,10}
func main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
    
    fmt.Printf("before arr: %v\n", arrs)

    up_equal := binary_search_up_equal(arrs, 8)

    fmt.Printf("the index of element which first ge %d is %d\n", 8, up_equal)

    up := binary_search_up(arrs, 8)

    fmt.Println(up)

    down_equal := binary_search_down_equal(arrs, 8)

    fmt.Println(down_equal)

    down := binary_search_down(arrs, 8)

    fmt.Println(down)
}

// 第一个大于等于
func binary_search_up_equal(arrs []int, target int) int {
    l, r := 0, len(arrs) - 1
    for l < r {
        mid := (l+r) / 2
        if arrs[mid] < target {
            l = mid + 1
        } else {
            r = mid
        }
    }
    return l
}

// 第一个大于
func binary_search_up(arrs []int, target int) int {
    l, r := 0, len(arrs) - 1
    for l < r {
        mid := (l+r) / 2
        if arrs[mid] <= target {
            l = mid + 1
        } else {
            r = mid
        }
    }
    return l
}

// 最后一个小于等于
func binary_search_down_equal(arrs []int, target int) int {
    l, r := 0, len(arrs) - 1
    for l < r {
        mid := (l+r+1) / 2
        fmt.Printf("mid is: %d\n", mid)
        if arrs[mid] > target {
            r = mid - 1
        } else {
            l = mid
        }
    }
    return l
}

// 最后一个小于
func binary_search_down(arrs []int, target int) int {
    l, r := 0, len(arrs) - 1
    for l < r {
        mid := (l+r+1) / 2
        fmt.Printf("mid is: %d\n", mid)
        if arrs[mid] >= target {
            r = mid - 1
        } else {
            l = mid
        }
    }
    return l
}