如何实现递归代码以返回已排序数组中的第一个负数?我在做什么
int counter = 0;
private int findNum(int[] a){
if(a[counter] < 0)
return a[counter];
else
counter++;
return findNum(a);
此代码按顺序n运行。但是,我相信通过使用像二分搜索这样的东西可能有更快的方法,但我还没有想到它。有人知道更快的方式吗?
答案 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)
调用此方法。