有一个有序有重复数的int32的数组。
1.根据输入参数要求返回数组中第一个要找的数的位置的前一个位置或者后一个位置(位置前后由输入参数决定)
2.要求不变下。找出数组中最后一个要找的数的位置的前一个位置或后一个位置
package main
import "fmt"
func BinarySearch(nums []int32,target int32, RightLeft int32,side int) int {//如果side为-1表示前一个,1表示后一个;
//RightLeft表示左右,-1为左,1为右
location:=0
if RightLeft==-1{
location= BinaryRight(nums , target )
location=location+side
}
if RightLeft==1{
location= BinaryLeft(nums , target)
location=location+side
}
return location
}
func BinaryRight(nums []int32, target int32) int {//返回指定元素最右边那个
r :=BinaryLeft(nums , target+1) -1
return r
}
func BinaryLeft(nums []int32, target int32) int {//返回指定元素最左那个
r := len(nums) - 1
if r == -1 {
return 0
}
l := 0
for l <= r {
mid := (l + r) / 2
if nums[mid] < target {
l = mid + 1
} else {
r = mid - 1
}
}
return l
}
func main() {
num:= []int32{1,1,2,2,2,3,3,3,3,3,3,4,5,5,5,7,8,9,9,10}
//location:=BinarySearch(num ,3, 1 ,1)//查找最左边的3的后一个
//location:=BinarySearch(num ,3, 1 ,-1)//查找最左边的3的前一个
//location:=BinarySearch(num ,3, -1 ,1)//查找最右边的3的后一个
location:=BinarySearch(num ,3, -1 ,-1)//查找最右边的3的前一个
fmt.Printf("%d\n" , location )
}