二分搜索应用二

来源:互联网 发布:体育套利软件 编辑:程序博客网 时间:2024/06/02 18:23

从一组有序数组中查找target第一次出现的位置

从有序数组中查找target 第一次出现的位置的数学关系如下:

假定 数组的左边的下标为:L, 右边的下标为R,则一定满足一下数学表达式

1.(L+1) ==R && arr[L] < target && arr[R] >= target2.arr[L] < target, arr[R] >= target

综上两个条件,在java代码的实现中,设置为L=-1,R= n(n为数组的长度)

private static int binarySearchFirst(int[] arr,int target)    {        int L = -1;        int n = arr.length;        int R = n;        //设定目标索引值,从下标0开始,为了查找第一个元素        int p = 0;        while (L +1 != R)        {            int mid = (L+R) / 2;            if (arr[mid] < target)            {                L = mid;            }            else            {                R = mid;            }            //try catch用于检查数组下标越界,如果数组下标越界,就忽略            try            {                if ((L+1) == R && arr[L] < target && arr[R] >= target)                {                    p = R;                }            }            catch(Exception e)            {            }        }        //判断查找到的目标值的索引是否有效        if (p >= n || arr[p] != target)        {            p = -1;        }        return p;    }