Arrays 算法分析-在排序数组中查找缺失整数优于O(n)
我第一次对算法类进行分析,我想知道是否有人可以帮助我完成下面的例子。我相信我已经解决了O(n)复杂度的问题,但是我想知道是否有一个更好的版本我没有考虑O(logn)Arrays 算法分析-在排序数组中查找缺失整数优于O(n),arrays,algorithm,sorting,asymptotic-complexity,Arrays,Algorithm,Sorting,Asymptotic Complexity,我第一次对算法类进行分析,我想知道是否有人可以帮助我完成下面的例子。我相信我已经解决了O(n)复杂度的问题,但是我想知道是否有一个更好的版本我没有考虑O(logn) 设A=A[1]可以用A[i]>i对第一个索引i进行二进制搜索。如果缺少的整数是k,那么A[i]=i表示i=k。这个逻辑当然是正确的,但它的速度不够快,不能超过O(n),因为您检查每个元素 通过观察如果A[i]==i,则jn的真理 此外,此数组以零个或多个连续的false开始,其余条目均为true 现在的问题是在布尔值的(排序)数组中
设A=A[1]可以用A[i]>i对第一个索引i进行二进制搜索。如果缺少的整数是k,那么A[i]=i表示i
A[i]==i
,则j
处的所有元素都位于其适当的位置,可以更快地完成此操作。该观察结果应足以构建一个以O(log2n)运行的分而治之方法:
- 检查中间的元件
- 如果它在错误的位置,向左走
- 否则,向右走
更正式地说,您正在寻找一个点,其中
a[i]==i
和a[i+1]==i+2
。从数组末尾的间隔开始。间隔中间的每个探针将剩余间隔收缩两倍。在某个时刻,只剩下两个元素的间隔。左边的元素是最后一个“正确”的元素,而右边的元素是缺失数字后的第一个元素。有时,诀窍是以不同的方式思考问题
实际上,您只是在处理布尔值数组;索引n
处的条目是a[n]>n
的真理
此外,此数组以零个或多个连续的false
开始,其余条目均为true
现在的问题是在布尔值的(排序)数组中查找
true
的第一个实例的索引。Yes。有更好的解决办法。提示:您真的必须查看数组中的每个元素吗?请您整理一下您对问题的陈述好吗? (1) 如果A是不同的,这意味着它们不相等;那么为什么不直接说“A[1]i完成此工作?如果原始选择是A[i-1]==i,则对right@Busturdust是的,就是这样。是[i-1]>我真的需要终止子句吗?因为如果缺少的元素是1,那么所有元素都将是[i-1]>i,并且将在到达第一个元素之前终止。我想我缺少了something@Busturdust您需要找到一个点,其中a[i]==i
和a[i+1]==i+2
。从阵列末端的间隔开始,间隔中间的每个探测器将剩余间隔缩小两倍。在某些情况下,只剩下两个元素的间隔。左侧的元素是最后一个“正确”的元素元素,而右侧的元素是缺少编号后的第一个元素。
for(i = 1; i < n +1; i++) :
if(A[i-1] > i) :
return i