feat(Go-Tool):2021/2/5: 新增二分查找区间内数值方法
This commit is contained in:
@@ -68,6 +68,8 @@
|
|||||||
|
|
||||||
2020/12/31:新增项目案例(角色技能树)
|
2020/12/31:新增项目案例(角色技能树)
|
||||||
|
|
||||||
|
2021/2/5: 新增二分查找区间内数值方法
|
||||||
|
|
||||||
# 修复日志
|
# 修复日志
|
||||||
2020/11/23:修改项目案例(按照一定规则对一组数据进行排序分组)
|
2020/11/23:修改项目案例(按照一定规则对一组数据进行排序分组)
|
||||||
|
|
||||||
|
|||||||
@@ -26,3 +26,27 @@ func BinarySearch(list []int, value int) int {
|
|||||||
|
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//二分查找在两个数值之间的数据
|
||||||
|
func BinarySearchBetween(list []int, value int) int {
|
||||||
|
low := 0
|
||||||
|
high := len(list) - 1
|
||||||
|
var mid int
|
||||||
|
|
||||||
|
for low <= high {
|
||||||
|
//求mid
|
||||||
|
mid = (low + high) >> 1
|
||||||
|
//要算后面一个元素,所以下标要判断是否超过 并且需要考虑超过数组最大值的情况
|
||||||
|
if (mid+1 < len(list) && value > list[mid] && value < list[mid+1]) || value == list[mid] || (mid+1 >= len(list) && value > list[mid]) {
|
||||||
|
return mid
|
||||||
|
}
|
||||||
|
//位移
|
||||||
|
if value < list[mid] {
|
||||||
|
high = mid - 1
|
||||||
|
} else {
|
||||||
|
low = mid + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//未找到元素
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,3 +40,66 @@ func TestBinarySearch(t *testing.T) {
|
|||||||
position = BinarySearch(oddNumList, -10)
|
position = BinarySearch(oddNumList, -10)
|
||||||
fmt.Println(position)
|
fmt.Println(position)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBinarySearchBetween(t *testing.T) {
|
||||||
|
|
||||||
|
evenNumList := []int{1, 2, 3, 5, 6, 7, 9, 10, 22, 111, 333, 431}
|
||||||
|
|
||||||
|
for _, r := range evenNumList {
|
||||||
|
position := BinarySearchBetween(evenNumList, r)
|
||||||
|
fmt.Println(position)
|
||||||
|
}
|
||||||
|
|
||||||
|
position := BinarySearchBetween(evenNumList, 999)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, -10)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, 1)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, 3211)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, 334)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, 110)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(evenNumList, 3222)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
fmt.Println()
|
||||||
|
|
||||||
|
oddNumList := []int{1, 2, 3, 5, 6, 7, 9, 10, 22, 111, 333, 431, 3211}
|
||||||
|
for _, r := range oddNumList {
|
||||||
|
position := BinarySearchBetween(oddNumList, r)
|
||||||
|
fmt.Println(position)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("测试between")
|
||||||
|
fmt.Println()
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 999)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, -10)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 1)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 3211)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 334)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 110)
|
||||||
|
fmt.Println(position)
|
||||||
|
|
||||||
|
position = BinarySearchBetween(oddNumList, 3222)
|
||||||
|
fmt.Println(position)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user