【发布时间】:2019-01-25 05:23:10
【问题描述】:
为了记录,我在一些网络编码网站上遇到了这个问题,但我真的对我错过的东西而不是分数感兴趣。就是这样:
实现函数countNumbers,该函数接受唯一整数的排序数组并计算小于参数lessThan的数组元素的数量。
例如,SortedSearch.countNumbers(new int[] { 1, 3, 5, 7 }, 4) 应该返回 2,因为有两个数组元素小于 4。
我给出了以下解决方案,但是,我只是不知道在什么情况下它会失败? (该网站说它没有通过 4 次测试中的 1 次)。而且我也不确定我可以对lessThan 的价值做出什么样的假设。
public class SortedSearch {
public static int countNumbers(int[] sortedArray, int lessThan) {
if (sortedArray == null || sortedArray.length == 0)
return 0;
if (sortedArray.length == 1) {
return sortedArray[0] < lessThan? 1:0;
}
int left = 0;
int right = sortedArray.length-1;
int middle = 0;
while(left<right) {
middle = left + (right-left)/2;
if (sortedArray[middle]<lessThan) {
left = middle+1;
} else if (sortedArray[middle]>lessThan) {
right = middle-1;
} else {
return middle;
}
}
return left;
}
public static void main(String[] args) {
System.out.println(SortedSearch.countNumbers(new int[] { 1, 3, 5 }, 4));
}
}
【问题讨论】:
-
试试
System.out.println(SortedSearch.countNumbers(new int[] { 1, 3 }, 4)); -
这些挑战的乐趣在于编写自己的测试。这对于使用 junit 做一些工作来说是完美的。简单想想相关的案例,比如:奇数个条目,偶数个,结果应该是0或1的极端案例。只是说:如果这是关于学习,那就把它当作学习测试的机会。
-
还有更好的方法来写它(在索引或其他方面),这样我就可以在极端情况下写更少的'if'?
-
@user1559625 我们已经回答了您的问题。您能否考虑评论该答案是否对您有帮助,并接受最能回答您问题的答案?
-
@vivek_23 当然,我只是标记了有用的答案,但没有接受一个,因为我仍然对正确性有些怀疑。
标签: java algorithm sorting data-structures binary-search