找出长度为(n−1)的一维整数数组中元素取值范围是[1, n]时缺失的那个数
发布时间
阅读量:
阅读量
已知一个整型数组,其长度为n-1,数组中的元素取值范围为1至n,且所有数字均不重复。此时数组中缺失了一个数字,请编写一个高效的程序以确定该缺失的数值。
一、数组有序性分析
题目未明确指出该数组是否具有有序性,若假定其为有序状态,则可采用二分查找算法进行处理,此时的时间复杂度为O(logN)。当所获取的中间元素的数值与对应下标相等时,后续的搜索范围应限定在右半部分;若中间元素的数值与下标不一致,但其前一个元素的数值与下标相等,则表明当前中间元素是首个出现数值与下标不符的情况,其对应的下标即为数组中缺失的数字;若中间元素的数值与下标不一致,并且前一个元素的数值也与其下标不匹配,则说明接下来只需在左半部分继续进行查找。
参考代码:
int getLoseNum(int a[], int left, int right)
{
int mid;
while(left <= right)
{
mid = (left + right) / 2;
if(a[mid] == mid + 2) //缺失的数据在后半部分
right = mid - 1;
else if(a[mid] == mid + 1) //缺失的数据在前半部分
left
全部评论 (0)
还没有任何评论哟~
