【发布时间】:2016-10-07 09:12:41
【问题描述】:
代码中的关键变化可能是这样的:
// while loop from 0 to n - 2; i initially = 0
if( arr[i + 1] != element && arr[i] != element) i += 2;
else if(arr[i] == element){ cout << "Element present at: " << i; }
else{ cout << "Element is present at: " << i + 1; return 0; }
你怎么看?
【问题讨论】:
-
O(n/2)保持在O(n)的顺序上 -
没有。 log(n) 是当一个 分成两半(或任何其他 const 比率 当前每个新细分问题的大小b>,即你的问题大小是
16,然后变成8 -> 4 -> 2 -> 1。如果将一个问题分成两半只进行一次,那么它就是 O(n/2) ~= O(n)。你所做的根本没有意义。如果您少执行 2 次循环,但在其中多做 2 倍的工作,您将一无所获 -
另外,如果你的
n很奇怪,你必须在循环之后检查最后一个元素,这会使你的代码更复杂,可读性更低,那么它应该是 -
你想要的是二进制搜索,但它只适用于排序数据
标签: algorithm search time-complexity linear-search