【问题标题】: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) 调用的。