闭区间二分查找

闭区间二分查找模板

Posted by Sirin on September 30, 2025
闭区间二分查找

原题

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

33. 搜索旋转排序数组 - 力扣(LeetCode)

闭区间二分查找模板

func binarySearch(nums[] int, target int) int {
	low, high := 0, len(nums)-1
	
	for low < high {
		mid := (low+high) >> 1
		
		if nums[mid] < target {
			low = mid+1
		} else {
			high = mid
		}
	}
    
    if l == r && l >= 0 && l < len(nums) && nums[l] == target {
        return l
    }
    
    return ERR_NO_SUCH_TARGET
}

二分查找主要是注意边界条件,不然很容易出现死循环或者漏掉答案的情况。

注意点包括

  • 循环判断条件是左右指针不相等,相等时说明已经结束
  • 尽可能不要出现<arg> = mid-1的更新,容易出现负的下标,此外执行<arg> = mid+1的情况下也不要在条件分支里存在==target的判断
  • 最好判断多个强条件以确定二分查找的答案是正确的