乙個長度為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 <= 陣列長度 <= 10000
class
solution
if(nums[nums.length -1]
!= nums.length)
return nums.length;
return0;
}}
缺失的數字等於「右子陣列的首位元素」對應的索引;因此考慮使用二分法查詢「右子陣列的首位元素」。
演算法解析:
初始化:左邊界i=0,右邊界j=len(nums)-1;代表閉區間[i,j]。
迴圈二分:當i≤j
i \leq j
i≤j時迴圈(即當閉區間[i,j]為空時跳出);
計算中點m=(i+j)/2;
若nums[m]=m,則「右子陣列的首位元素」一定在閉區間[m+1,j]中,因此執行i=m+1;
若n um
s[m]
≠mnums[m] \neq m
nums[m
]=
m,則「左子陣列的末位元素」一定在閉區間[i,m-1]中,因此執行j=m-1;
返回值:跳出時,變數i和j分別指向「右子陣列的首位元素」和「左子陣列的末位元素」。因此返回i即可。
class
solution
return i;
}}
複雜度分析: 0 n 1中缺失的數字
乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。分析 因為陣列是排序的,因此陣列中開始的一些數字與它們的下標相同。也就是說,0在下標為0的位置,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 思路 判斷當前的數字是否與當...