【Java】二分法查找数字/查找左右边界代码分析

本文详细分析了在升序数组中使用二分法查找特定数字、寻找左侧闭边界和右侧闭边界的算法。针对每种情况,文章阐述了搜索细节,包括特殊情况的处理,如目标值在数组中的重复情况。最后,总结了确定边界和返回值的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二分法lo、hi、mid变来变去很烦,容易出错,所以记下

1.升序查找某个数字

num为一个升序数组,target为要查找的数字,找到了则返回索引下标,否则返回-1

public int search(int[] num, int target) {
   
        int lo = 0, hi = num.length;
        while (lo < hi) {
   
            int mid = lo + (hi - lo)/2;
            if (num[mid] == target)
                return mid;
            else if (num[mid] > target)
                hi = mid;
            else if (num[mid] <
### Java中实现二分法查找的代码示例 以下是基于提供的参考资料以及标准实现方式的一个完整的Java二分法查找代码示例: ```java public class BinarySearchExample { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left <= right) { // 计算中间位置,防止溢出使用 (right - left) / 2 + left 替代 (left + right) / 2 int mid = left + (right - left) / 2; if (array[mid] == target) { return mid; // 找到目标,返回索引 } else if (array[mid] < target) { left = mid + 1; // 目标在右半部分 } else { right = mid - 1; // 目标在左半部分 } } return -1; // 如果找不到目标,则返回 -1 } public static void main(String[] args) { int[] sortedArray = {-1, 0, 3, 5, 9, 12}; // 已排序数组 int targetValue = 9; int resultIndex = binarySearch(sortedArray, targetValue); if (resultIndex != -1) { System.out.println("目标 " + targetValue + " 的索引为:" + resultIndex); // 输出应为4 } else { System.out.println("未找到目标!"); } } } ``` #### 关于上述代码的关键点解释: - **输入条件**:二分法查找的前提是数组必须已经按照升序排列[^3]。 - **边界处理**:通过`while (left <= right)`循环来确保不会错过任何可能的位置[^5]。 - **防溢出计算**:为了避免`(left + right)/2`可能导致的大整数溢出问题,采用了`mid = left + (right - left) / 2`的方式[^4]。 此代码实现了基本的需求描述,并提供了清晰的时间复杂度分析——O(log n),其中n表示数组大小[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值