我有一个像MyArr {1,3,5,7,9,2,4,6,8,10}
这样的数组。我需要迭代并打印"Not Found"
直到我达到2.之后,我需要打印剩余的"Found"
。
我的方法是使用Arrays.BinarySearch(MyArr,2)
返回索引2.我不知道如何从这里实现。
答案 0 :(得分:4)
不能使用二进制搜索,因为它只适用于已排序的数组。
您需要迭代数组。对于每个元素,您必须检查它是否是您的目标值并让代码记住结果,和打印适合结果值的输出。
答案 1 :(得分:0)
binarySearch
仅适用于已排序的输入数组(按升序排列),并且您的输入数组未排序。
解决方案#1:
首先对数组进行排序。然后
binarySearch
将找到排序数组中元素的正确偏移量。
提示:查看Arrays
中的其他方法。
请注意这不是正确的解决方案。实际的问题陈述说你需要逐步完成数组,1)打印"未找到"对于非匹配元素和2)打印"发现"当你找到第一场比赛。解决方案#1仅解决第二个要求,而不是第一个要求。
实际上,二分查找不能满足第一个要求。
除此之外:对数组进行排序以便您可以进行二元搜索...只需一次......效率低下。排序时间比搜索时节省的时间多。在复杂性方面,排序将为O(NlogN)
,搜索O(logN)
的整体复杂度为O(NlogN)
。相比之下,简单的线性搜索是O(N)
。因此,你只会"收支平衡"如果您对每种类型进行O(logN)
二进制搜索。
解决方案#2:
忘记二进制搜索,并编写一个循环遍历数组的所有元素。
提示: for
循环最好,但是哪种for
循环?