乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。
分析:
因為陣列是排序的,因此陣列中開始的一些數字與它們的下標相同。也就是說,0在下標為0的位置,1在下標為1的位置,以此類推。如果不在陣列中的那個數字記為m,那麼所有比m小的數字的下標都與它們的值相同。
由於m不在陣列中,那麼m+1處在下標為m的位置,m+2處在下標為m+1的位置,以此類推。我們發現m正好是陣列中第乙個數值和下標不相等的下標,因此這個問題轉換成在排序陣列中找出第乙個值和下標不相等的元素。
我們可以基於二分查詢的演算法用如下過程查詢:
下面是基於二分查詢演算法的c++實現**:
int getmissingnum(const int* num, int len)
else //往右半部分查詢
}if (left == len) //查詢到最後乙個元素,其即為所求
return len;
return -1; //無效輸入,返回-1
}
0 n 1中缺失的數字
題目 乙個長度為n 1的遞增陣列中所有的數字都是唯一的,並且每個數字都在範圍0 n 1之內,在範圍內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。第乙個方法先遍歷,求出所有資料的和,再利用公式,找出缺失的資料的值。第二個方法,利用二分查詢,找出缺失的數字。package helen.c ...
0 n 1中缺失的數字
題目 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。示例 1 輸入 0,1,3 輸出 2 示例 2 輸入 0,1,2,3,4,5,6,7,9 輸出 8 思路 判斷當前的數字是否與當...
0 n 1中缺失的數字
題目 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。示例 1 輸入 0,1,3 輸出 2 示例 2 輸入 0,1,2,3,4,5,6,7,9 輸出 8 限制 1 陣列長度 1000...