我正在第一次学习算法分析课程,并想知道是否有人可以协助下面的例子。我相信我已经用O(n)复杂度解决了它,但是我想知道是否有更好的 O(logn) 解法?
让 A = A[1] <= ... <= A[n+1] 成为一个排序好的数组,包含 n 个不同的整数,每个整数在 [1...n+1] 的范围内。换句话说,{1,...,n+1} 中恰有一个整数不在 A 中。请描述一种有效的算法来查找缺失的整数。分析您的算法的最坏情况复杂度(对数组 A 的访问次数)。
我的解决方案相对简单,我认为结果在最坏情况下是 N 的复杂度。也许我对这个例子过于深思熟虑了,但是有没有更好的解决方案呢?
我的解决方案:
这个方法的逻辑是,由于数组已经排序,第一个元素必须是1,第二个必须是2,以此类推,直到数组中的元素比它应该的元素大,表示漏了一个元素,返回应该的元素即为缺失的元素。
这个逻辑正确吗?有更好的方法吗?
感谢阅读和提前的帮助。
让 A = A[1] <= ... <= A[n+1] 成为一个排序好的数组,包含 n 个不同的整数,每个整数在 [1...n+1] 的范围内。换句话说,{1,...,n+1} 中恰有一个整数不在 A 中。请描述一种有效的算法来查找缺失的整数。分析您的算法的最坏情况复杂度(对数组 A 的访问次数)。
我的解决方案相对简单,我认为结果在最坏情况下是 N 的复杂度。也许我对这个例子过于深思熟虑了,但是有没有更好的解决方案呢?
我的解决方案:
for(i = 1; i < n +1; i++) :
if(A[i-1] > i) :
return i
这个方法的逻辑是,由于数组已经排序,第一个元素必须是1,第二个必须是2,以此类推,直到数组中的元素比它应该的元素大,表示漏了一个元素,返回应该的元素即为缺失的元素。
这个逻辑正确吗?有更好的方法吗?
感谢阅读和提前的帮助。