java - 通过偶数递增和奇数递减的数组进行二分查找?

标签 java search binary-search

我知道我的代码很困惑,对此我很抱歉,我试图尽快编写它而不是安排语句。

它适用于大多数情况,但不适用于 {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/

相关文章:

java - Errai 对 GAE 平台的支持

java - JSONParser 在 Android 应用程序中显示错误

ios - 在 NSArray 中搜索值的范围

javascript - HTML:如何创建搜索栏?

java - 将类注入(inject) JVM 并与现有类交互

java - 没有 xpath 选项的标签复选框选择

multithreading - 是否有最小化线程数的搜索算法?

mysql - 如何使用 MySQL 实现二进制搜索?

Golang 二分查找

python - binarySearch 与 in,意外结果 (Python)