Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
C 查找索引i,使a[i]=i_C_Algorithm - Fatal编程技术网

C 查找索引i,使a[i]=i

C 查找索引i,使a[i]=i,c,algorithm,C,Algorithm,可能重复: 您将得到一个整数排序数组和数组长度。现在你必须找到一个索引i,这样a(i)=i。 如果给出了索引,我可以用o(logn)来做,但是如果没有提到索引I呢?正如Alexandre在一篇评论中所说,对索引的预知意味着它是o(1),而不是o(logn) 而且,除非您没有告诉我们一些信息,否则您需要O(n)时间在不事先知道的情况下执行此操作: for x = 0 to len(a) - 1: if a[x] = x: return x 澄清:最初的问题没有说明该列

可能重复:

您将得到一个整数排序数组和数组长度。现在你必须找到一个索引
i
,这样
a(i)=i

如果给出了索引,我可以用o(logn)来做,但是如果没有提到索引
I
呢?

正如Alexandre在一篇评论中所说,对索引的预知意味着它是
o(1)
,而不是
o(logn)

而且,除非您没有告诉我们一些信息,否则您需要
O(n)
时间在不事先知道的情况下执行此操作:

for x = 0 to len(a) - 1:
    if a[x] = x:
        return x

澄清:最初的问题没有说明该列表已排序,这是后来添加的。由于这使问题与之重复,因此您应该查看那里的答案以获得解决方案


这个答案将保持原样,因为复制其他答案是没有意义的,它与未排序的案例相关。

正如Alexandre在评论中所述,索引的预知意味着它是
O(1)
,而不是
O(logn)

而且,除非您没有告诉我们一些信息,否则您需要
O(n)
时间在不事先知道的情况下执行此操作:

for x = 0 to len(a) - 1:
    if a[x] = x:
        return x

澄清:最初的问题没有说明该列表已排序,这是后来添加的。由于这使问题与之重复,因此您应该查看那里的答案以获得解决方案


这个答案将保持原样,因为复制其他答案没有意义,它与未排序的案例相关。

根据给出的信息,您需要检查值,直到找到匹配项。最坏的情况(没有匹配,或在最后一个单元格中找到匹配)是O(n)。 如果数组已排序,则可以执行二进制搜索,即O(logn)


您的声明可能是错误的,或者您遗漏了一些信息。

根据给定的信息,您需要检查值,直到找到匹配项。最坏的情况(没有匹配,或在最后一个单元格中找到匹配)是O(n)。 如果数组已排序,则可以执行二进制搜索,即O(logn)



您的声明是错误的,或者您遗漏了一些信息。

如果我被给出,我可以在固定时间内完成:)我已经使用修改的二进制搜索完成了,您的解决方案…@prp您如何在O(log n)时间内对数组进行排序?mid=(低+高)/2如果[a[mid]=mid],则返回mid FindIndex_值(数组,低,中-1)FindIndex_值(数组,中+1,高)@paxdiablo&david数组已经排序了…:)如果给我,我可以在固定时间内完成:)我已经使用修改过的二进制搜索完成了,你的解决方案…@prp你是如何在O(logn)时间内对数组进行排序的?mid=(低+高)/2如果[a[mid]=mid],那么返回mid FindIndex_值(数组,低,中1)FindIndex_值(数组,中+1,高)@paxdiablo&david数组已经排序…:)@paxdiablo你的意思是说如果没有给出索引i,我们将在o(n)中进行排序,对吗..可能额外的信息是数组已排序。@prp,是的。我在回答“如果没有提到索引I”这一点。其他人已经说过,如果你已经有了索引,那就是O(1)。@David,那是一回事。其他可能是上界和下界,没有重复项,或者其他十几个限制中的任何一个。@paxdiablo我怀疑没有重复项。@paxdiablo你的意思是说如果没有给出索引I,我们将在o(n)中进行操作,对吗?大概额外的信息是数组已排序。@prp,是的。我在回答“如果没有提到索引I”这一点。其他人已经说过,如果你已经有了索引,那就是O(1)。@David,那是一回事。其他可能是上界和下界,没有重复项,或者其他十几个限制中的任何一个。@paxdiablo我怀疑没有重复项。-1:您不能执行标准的二进制搜索来解决此问题。正确,您不能按原样对数组使用bsearch()。如果您想保留解决方案的O(logn)属性,您必须执行自己的二进制搜索。如果修改数组(就地或在副本中)并从[i]中减去i,则可以使用bsearch()。这样做的复杂性是O(n)。-1:您不能用标准的二进制搜索来解决这个问题。正确,您不能在数组上使用bsearch()。如果您想保留解决方案的O(logn)属性,您必须执行自己的二进制搜索。如果修改数组(就地或在副本中)并从[i]中减去i,则可以使用bsearch()。这样做的复杂性是O(n)。