使用递归在单调递减的数组中查找第一个负数

时间:2016-10-25 02:19:28

标签: java arrays recursion

如何实现递归代码以返回已排序数组中的第一个负数?我在做什么

int counter = 0;
private int findNum(int[] a){

    if(a[counter] < 0)
     return a[counter];

  else
       counter++;
       return findNum(a);

此代码按顺序n运行。但是,我相信通过使用像二分搜索这样的东西可能有更快的方法,但我还没有想到它。有人知道更快的方式吗?

1 个答案:

答案 0 :(得分:2)

我不确定你为什么要考虑性能,因为你正在使用递归来实现它。如果你需要效率,那么让迭代变得更有意义。

然而,有一种方法可以使用二进制搜索&#39;样式机制,甚至使用递归:

int findNeg(int[] array, int left, int right) {
    if (left > right)
        throw new IllegalArgumentException("No negative number");
    int mid = (left + right) / 2;
    if (array[mid] >= 0)
        return findNeg(array, mid + 1, right);
    else if (mid > left)
        return findNeg(array, left, mid);
    else
        return array[mid];
}

基本上,逻辑是它正在查看范围。如果范围为空,则没有负数。如果范围的中间是正的那么看起来正确。如果范围的中间是负数,则向左看,除非您位于范围的左边缘,在这种情况下,您有第一个负数。

使用findNeg(array, 0, array.length - 1)调用此方法。