我在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];
}
}
答案 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);
}
}