旋转排序数组中的最小值ArrayIndexOutOfBoundsException

时间:2014-10-26 23:15:55

标签: java arrays rotation binary indexoutofboundsexception

我在leetcode上发现了这个问题,我在我的平台上解决了这个问题。对于测试,我使用了1000个元素数组,并且从未出现过错误。在leetcode平台上,它会抛出ArrayIndexOutOfBoundsException。如果你仔细观察,元素a,b或n的方法就不会超出数组的长度。这是对问题的描述:

假设一个已排序的数组在事先未知的某个枢轴上旋转。 (即,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2)。 找到最小元素。 您可以假设数组中不存在重复。

public class Solution 
{
    public int findMin(int[] num)
    {
        int a = 0;
        int b = num.length - 1;
        int n = ( a + b ) / 2;

        while ( true ) 
        {
            if ( num[n] < num[n+1] && num[n] < num[n-1] )
                break;

            if ( num[a] < num[b] )
            {
                b = n;
                n = (a + n) / 2 + 1;
            } 
            else 
            {
                a = n;
                n = ( b + n ) / 2;
            }
        }
        return num[n];        
    }
}

1 个答案:

答案 0 :(得分:-1)

public static int findMin(int[] num) {
    return helper(num, 0, num.length - 1);
}

public static int helper(int[] num, int endLeft, int endRight) {
    if (endLeft == endRight)
        return num[endLeft];
    if ((endRight - endLeft) == 1)
        return Math.min(num[endLeft], num[endRight]);

    int middleIndex = endLeft + (endRight - endLeft) / 2;
    int middle = num[middleIndex]; // middle value

    if (num[endLeft] < num[endRight]) {
        return num[endLeft];
    } else if (middle > num[endLeft]) {
        // go right side
        return helper(num, middleIndex, endRight);
    } else {
        // go left side
        return helper(num, endLeft, middleIndex);
    }
}

来自coding interview