我知道我的代码很困惑,对此我很抱歉,我试图尽快编写它而不是安排语句。
它适用于大多数情况,但不适用于 {19,17,2,15,6,13,12,7,16,3,22}。
正如你所看到的,应该很简单,数组可以用任何方式排序,但偶数从头到尾总是增加,奇数减少。
我尝试做的是常规二分搜索,并带有一些条件来检查我们是否查看偶数或奇数,然后进行相应调整。
编辑:我忘了提及这是我试图解决的一个问题,他们特别说以最有效的方式搜索数组。
public static int find(int[] arr,int n)
{
final boolean EVEN;
if (n%2==0)
EVEN = true;
else
EVEN = false;
int min = 0, max = arr.length-1;
int m = 0;
do
{
m = (min+max)/2;
if (n == arr[m])
break;
if (arr[m]%2==0)
{
if (EVEN)
{
if (n>arr[m])
min = m+1;
else
max = m-1;
}
else
{
do
{
m--;
}
while(arr[m]%2==0);
if (arr[m]==n)
break;
if (n>arr[m])
max = m-1;
else
min = m+1;
}
}
else
{
if (!EVEN)
{
if (n>arr[m])
max = m-1;
else
min = m+1;
}
else
{
do
{
m++;
}
while(arr[m]%2!=0);
if (arr[m]==n)
break;
if (n>arr[m])
min = m+1;
else
max = m-1;
}
}
}while(min<max);
if (arr[m]==n)
return m;
else
return -1;
}
最佳答案
尝试
while(min<=max);
您可能会错过最小值和最大值重合的情况。
更新:
是的!我查了一下。我运行了你的程序
int[] array = {19,17,2,15,6,13,12,7,16,3,22};
对于所有值,如果您进行更正,它会按预期工作。
关于java - 通过偶数递增和奇数递减的数组进行二分查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540756/