我希望解决除O(n)复杂性之外的这个问题。这里已经描述的大多数问题都采用了[1,n]范围内的数字。在我试图解决的问题中,条件是: -
我提出的简单的O(n)解决方案是: -
int find_missing_num_ls (int arr[], int len)
{
int i = 0;
for (i=0; i<len-1;i++) {
if (arr[i+1] != (arr[i] +1))
return (arr[i]+1);
}
return -1;
}
有没有更有效的方法来找到它?
答案 0 :(得分:3)
k
。k + n/2
,则需要在前半部分搜索,否则在第二部分搜索。重复一半的数组,直到数组大小足以使问题变得微不足道。这应该是O(log n)。 如果你发现答案超过了最后一个元素,它也可能在第一个元素之前,因为我们假设第一个元素是正确的。