427 字
2 分钟
算法-二分查找
算法-二分查找
二分查找(binary search)是一种基于分治策略的高效搜索算法。它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。
二分查找实现
// BinarySearch//// @Description: 二分查找// @param nums 有序数组// @param target 目标值// @return int 目标值索引,若不存在返回-1func BinarySearch(nums []int, target int) int { if len(nums) == 0 { return -1 } // 初始化左右指针 left := 0 right := len(nums) - 1 // 当右指针小于左指针时,循环结束 for left <= right { // 计算中间元素的索引 mid := (right-left)/2 + left if nums[mid] == target { return mid } // 当中间元素小于目标值时,移动左指针,反之移动右指针 if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return -1}二分查找插入点实现
// BinarySearchInsertion//// @Description: 二分查找插入位置// @param nums 有序数组// @param target 目标值// @return int 插入位置下标func BinarySearchInsertion(nums []int, target int) int { if len(nums) == 0 { return 0 } // 初始化左右指针 left := 0 right := len(nums) - 1 // 当右指针小于左指针时,循环结束 // 此时左指针指向的元素为第一个大于目标值的元素,即插入位置 for left <= right { // 计算中间元素的索引 mid := (right-left)/2 + left // 当中间元素等于目标值时, 考虑到重复元素,我们规定将重复元素插入到其最左侧 if nums[mid] == target { right = mid - 1 } else if nums[mid] < target { left = mid + 1 } else { right = mid - 1 } } return left}