假设1-10000里有一个数字缺失,现在有9999个无序数字,如何快速定位这个数字?
1如果数组是有序的,可以采用快排方法,但是这个方法没有针对性,时间复杂度为O(nlogn)
2使用作何再做差的方法
result = sum(1-10000) - sum(a[0]-a[9998])
这种方法的复杂度为O(n)但是有可能溢出,缺乏鲁棒性。
3转化为find single number的方法,复杂度为O(n)
代码如下
int FindMissingNum( int numbers[] , int len){
int i,result;
if( numbers == NULL || len < 2)
return ERROR;
result = numbers[0];
for(i = 1; i != len; i++){
result ^= i;
result ^= numbers[i];
}
result ^= len;
result ^= (len+1);
return result;
}
在1-10000的序列中有一个数字缺失,已有9999个无序数字。文章探讨了三种方法来定位这个缺失的数字:1) 排序方法但时间复杂度较高;2) 利用数学公式求解,可能有溢出风险;3) 使用异或运算的find single number方法,复杂度为O(n)。并提供了具体的C语言实现代码。
359

被折叠的 条评论
为什么被折叠?



