给一串整数 0,1,2,...,N,其中一个整数缺失。也就是说,如果是排序好放到大小为N的数组中,其实最大的整数应该是N+1。你的任务和算法是找出其中缺失的整数。如果是排序好的,怎么做?如果是无序的,又该如何做?时间复杂度各是什么?你能想到的最优算法是什么?动手写下你的代码吧。
其实不用排序,把每个数字都加起来sum1=1+……+N,然后再计算一下如果一个都不缺的总和,sum2=N(N+1)/2,两个总合相减sum2-sum1,就得到了缺少的数字,由于可能数字过大产生溢出,可以分段相加,例如步长为65535,然后大于65535的都减去这个数值再加到一起。无论是否有序都可以。
如果有序 的话,其实采用二分查找的方法是最最快的,代价为O(log(N)),而相加的方法则是O(N)
其实不用排序,把每个数字都加起来sum1=1+……+N,然后再计算一下如果一个都不缺的总和,sum2=N(N+1)/2,两个总合相减sum2-sum1,就得到了缺少的数字,由于可能数字过大产生溢出,可以分段相加,例如步长为65535,然后大于65535的都减去这个数值再加到一起。无论是否有序都可以。
如果有序 的话,其实采用二分查找的方法是最最快的,代价为O(log(N)),而相加的方法则是O(N)