there is a sorted array which is of very large size. every element is repeated more than once except one element. how much time will it take to find that element?
Options are:
1.O(1)
2.O(n)
3.O(logn)
4.O(nlogn)
答案 0 :(得分:5)
问题的答案是O(n),这就是原因。
让我们首先总结一下我们所获得的知识:
问题是搜索只出现一次的那一项的时间增长是多少?
数组的排序属性,我们可以使用它来加速搜索项目吗?是的,没有。
首先,由于数组没有按属性排序,我们必须使用它来查找项目(只有一次出现),因此我们不能在这方面使用sorted属性。这意味着优化的搜索算法,例如二进制搜索,已经不存在了。
但是,我们知道如果数组已排序,则具有相同值的所有项目将组合在一起。这意味着当我们第一次看到我们看到的项目时,我们只需要将它与下面的项目进行比较。如果情况不同,我们会找到我们正在寻找的商品。
"第一次见到"很重要,否则我们会选择第一个值,因为两个项目之间存在两个项目不同的边界。
所以我们必须从数组的一端移动到另一端,并将每个项目与下一项进行比较,这是一个O(n)操作。
基本上,由于数组不是按照我们正在查看的属性进行排序,因此我们会重新进行线性搜索。
答案 1 :(得分:0)
必须是O(n)。