Algorithm 在数组中搜索每个元素+;前一元素的1或-1
整数数组包含的元素使得每个元素比前一个元素多或少1。现在给我们一个数字,我们需要确定该数字在数组中第一次出现的索引。Algorithm 在数组中搜索每个元素+;前一元素的1或-1,algorithm,search,language-agnostic,Algorithm,Search,Language Agnostic,整数数组包含的元素使得每个元素比前一个元素多或少1。现在给我们一个数字,我们需要确定该数字在数组中第一次出现的索引。 需要优化线性搜索。这不是家庭作业。你不能比线性更快。以下代码应尽可能快: int findFirstIndex(int num, int[] array) { int i = 0; while (i< array.length) if (array[i] == num) return i; else i += ab
需要优化线性搜索。这不是家庭作业。你不能比线性更快。以下代码应尽可能快:
int findFirstIndex(int num, int[] array) {
int i = 0;
while (i< array.length)
if (array[i] == num) return i;
else i += abs(array[i] - num)
return -1
}
int-findFirstIndex(int-num,int[]数组){
int i=0;
while(i
但在最坏的情况下仍然是O(array.length)。例如,如果要在仅包含0的数组中查找1,请考虑。然后,您不能跳过任何位置。从第一个位置开始;现在考虑搜索数N和第一个数之间的差值。如果数组[0]==N,那么我们就完成了;否则我们必须跳转abs(数组[0]-N)的位置;现在重复这个过程直到数组结束 我的算法如下:
int p=0, idx=-1;
while (p<len && p>=0)
if (A[p]==x)
idx = p;
else
p+= abs(x-A[p]);
intp=0,idx=-1;
而(p=0)
如果(A[p]==x)
idx=p;
其他的
p+=abs(x-A[p]);
时间复杂度:最坏的情况是O(n)。我希望平均情况比O(n)好(我认为是O(logn),但不确定)。
运行时间:对于所有情况,绝对优于线性搜索。您的问题是什么?你试过用什么方法来解决这个问题?你可能无法比线性时间做得更好。不管你有没有家庭作业,你仍然应该试着自己解决这个问题(并展示你的尝试)。(老实说,对我来说,不管是不是家庭作业,或者你说是不是家庭作业,都不起任何作用)。不过仍然有线性运行时,以防由于运行时的原因无法进行线性搜索complexity@NiklasB. 不确定平均情况是否也是O(n)。即使在这种情况下,它也会比简单的线性搜索有更好的运行时间。我只是想指出,在最坏的情况下,这仍然是线性的。这不是应该是
|x-A[p]
(即绝对值)吗?谢谢@Dukeling。我忽略了这一点。