在排序数组中查找索引

时间:2014-03-09 22:00:48

标签: java arrays binary-search

这是给出排序数组和目标值的基本问题,如果找到目标则查找索引。如果没有,请返回索引按顺序插入的索引。 这是我的方法:

public int searchInsert1(int[] A, int target) {
    if (A == null || A.length == 0)
        return 0;
    return search(A, target, 0, A.length);
}
public int search(int[] a, int target, int s, int e) {
    if (s == e)
        return s;
    int mid = (s + e) / 2;
    if (a[mid] == target) {
        return mid;
    } else if (target < a[mid]) {
        return search(a, target, 0, mid - 1);
    } else {
        return search(a, target, mid, e);
    }
}

不知何故,它总是返回错误的索引值。但是,如果我将if else部分更改为以下内容,则可以:

    if (a[mid] == target) {
        return mid;
    } else if (target > a[mid]) {
        return search(a, target, mid + 1, e);
    } else {
        return search(a, target, 0, mid);
    }

任何人都可以详细帮助我吗?非常感谢提前

3 个答案:

答案 0 :(得分:0)

您的代码在这些部分中有错误: 1.你设置的结束索引错误,应该是:A.length - 1; 2.条件部分的返回值是错误的,“else”部分的返回值应为:search(a,target,0,mid + 1,e);

正确的代码应该是:

    public int searchInsert1(int[] A, int target) {
        if (A == null || A.length == 0)
            return 0;

        // check if target is larger than the largest value or smaller than the smallest value
        if (target < A[0])
            return 0;
        else if (target > A[A.length-1])
            return A.length-1;

        return search(A, target, 0, A.length-1);
    }

    public int search(int[] a, int target, int s, int e) {
        if (s == e)
            return s;
        int mid = (s + e) / 2;
        if (a[mid] == target) {
            return mid;
        } else if (target < a[mid]) {
            return search(a, target, 0, mid - 1);
        } else {
            return search(a, target, mid+1, e);
        }
    }

答案 1 :(得分:0)

使用此方法

 public int search(int[] a, int target, int s, int e) {
     int low = s;
     int high = e- 1;

     while (low <= high) {
        int mid = (low + high) >>> 1;
        int midVal = a[mid];

        if (midVal < target)
            low = mid + 1;
        else if (midVal > target)
            high = mid - 1;
        else
            return mid; // key found
     }
     return -(low + 1);  // key not found.
  }

答案 2 :(得分:0)

这是我在 Java

中最简单的解决方案
public static int search(int[] a, int target) {

    for (int i = 0; i < a.length; i++) {

        if (a[i] == target) {

            return i;

        }


    }
    return -1;
}