【问题标题】:Finding first negative number in a monotonically decreasing array using recursion使用递归在单调递减数组中查找第一个负数
【发布时间】:2016-10-25 02:19:27
【问题描述】:

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

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

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

  else
       counter++;
       return findNum(a);

此代码按顺序 n 运行。但是,我相信通过使用二进制搜索之类的方法可能会有一种更快的方法,但我还没有弄清楚。有人知道更快的方法吗?

【问题讨论】:

    标签: java arrays recursion


    【解决方案1】:

    鉴于您使用递归来实现这一点,我不确定您为什么要考虑性能。如果你需要效率,让它迭代会更有意义。

    但是,有一种使用“二分搜索”风格机制的方法,甚至使用递归:

    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) 调用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2018-11-18
      • 2021-08-26
      • 2011-10-19
      相关资源
      最近更新 更多