我刚刚写了这个考试,其中有一个问题:考虑一个大小为2n的数组,其中奇数位置的数字按升序排序,偶数位置的数字按降序排序。现在,如果我必须在这个数组中搜索一个数字,这是一个很好的方法吗?选项是:
在1中,快速排序采用O(n log n)和二进制搜索,O(log n)
在2中,Merge采用O(n)然后O(log n)进行二进制搜索
3,需要O(n)。
所以3结果是要走的路。那是对的吗?是否有更好的选择可能没有给出?
编辑:我是第一个接受Lukas的回答。叹气, 是另一种选择。我得到-1。 :(答案 0 :(得分:6)
您可以进行两次二进制搜索 - 即O(log n),因为您忽略常量(在这种情况下为2)。
答案 1 :(得分:1)
如果你只对两个集合进行二元搜索会不会更容易?那么O(log n)和O(log n)?
这会不会更容易,所以如果在第一步中找到,第二步甚至不需要?
答案 2 :(得分:0)
检查它是偶数还是奇数,并对您感兴趣的数组部分进行二分搜索.O(log n)。
答案 3 :(得分:0)
我认为第二种选择符合您的标准。
合并排序:我们可以轻松地从两个半排序数组中获取完整的排序数字,时间复杂度为O(n)
然后二进制搜索的时间复杂度为O(logn)