Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在数组中搜索每个元素+;前一元素的1或-1_Algorithm_Search_Language Agnostic - Fatal编程技术网

Algorithm 在数组中搜索每个元素+;前一元素的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

整数数组包含的元素使得每个元素比前一个元素多或少1。现在给我们一个数字,我们需要确定该数字在数组中第一次出现的索引。
需要优化线性搜索。这不是家庭作业。

你不能比线性更快。以下代码应尽可能快:

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)的位置;现在重复这个过程直到数组结束

我的算法如下:

  • p=0
  • 如果(A[p]==x),那么idx=p,算法完成,否则转到下一步
  • 设置p+=| x-A[p]|
  • 转到2
  • 说A[p]>x。然后,由于项目增加或减少1,因此idx肯定至少(A[p]-x)索引远离p。同样的原理也适用于A[p]
    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。我忽略了这一点。