You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旋转排序数组搜索Java代码bug排查:目标值7匹配失败

旋转数组查找问题调试

问题背景

给定一个经旋转的升序整数数组(元素互不相同),要求在O(log n)时间内查找目标值的索引,不存在则返回-1。

代码错误定位

你的代码核心错误在于搜索区间的左边界初始化错误:

  • 错误代码行:int left = nums[0];
  • 正确逻辑:left应该表示搜索区间的左索引,初始值应为0,而非数组第一个元素的值。

测试用例错误分析

针对测试用例nums = [6,7,1,2,3,4,5]、target =7:

  1. 错误初始化后,left =6(数组第一个元素的值),right=6(数组最后一个索引)
  2. 第一次循环mid=(6+6)/2=6,nums[6]=5≠7
  3. 判断nums[left](nums[6]=5)<= nums[mid](5)成立,进入左半部分逻辑
  4. 检查5<=7<5不成立,执行left=mid+1=7,此时left>right,循环终止返回-1,与预期结果不符。

修正后的代码

class Solution {
    public int search(int[] nums, int target) {
        int left = 0; // 修正为左索引初始值0
        int right = nums.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (target == nums[mid]) {
                return mid;
            } else {
                // 左半部分有序
                if (nums[left] <= nums[mid]) {
                    if (nums[left] <= target && target < nums[mid]) {
                        right = mid - 1;
                    } else {
                        left = mid + 1;
                    }
                } else {
                    // 右半部分有序
                    if (nums[mid] < target && target <= nums[right]) {
                        left = mid + 1;
                    } else {
                        right = mid - 1;
                    }
                }
            }
        }
        return -1;
    }
}

修正后测试验证

  1. 初始left=0,right=6,mid=3,nums[3]=2≠7
  2. 判断nums[0]=6 <= nums[3]=2不成立,进入右半部分逻辑
  3. 检查2<7<=5不成立,执行right=mid-1=2
  4. 新循环left=0,right=2,mid=1,nums[1]=7匹配目标值,返回索引1,符合预期。

内容的提问来源于stack exchange,提问作者nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:51:31