0到n 1中缺失的數字

2021-09-27 04:32:34 字數 1095 閱讀 2987

一、題目

乙個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0到n-1之內。在範圍0到n-1的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。

二、思路

分析易知,陣列形式如下:

如果從頭到尾依次比較值與小標是否相等,時間複雜度為o(n),效率低。

由於是排序陣列,我們繼續考慮使用二分查詢演算法,結合上圖可知:

當中間數字等於其下標時,我們在後半部分查詢;

當中間數字不等於其下標時,

1)如果中間數字的前乙個數字也不等於其下標,則在前半部分查詢;

2)如果中間數字的前乙個數字等於其下標,則說明中間數字的下標即為我們所要找的數字。

public int getmissingnumber(int arr) 

high = mid - 1;

} else

}return -1;

}

拓展:

一、題目

假設乙個單調遞增的陣列裡的每個元素都是整數並且是唯一的。請程式設計實現乙個函式找出陣列中任意乙個數值等於其下標的元素。例如,在陣列中,數字3和它的下標相等。

二、思路

同53-1和53-2一樣,不再從頭到尾遍歷,由於是排序陣列,我們繼續考慮使用二分查詢演算法:

1)當中間數字等於其下標時,中間數字即為所求數字;

2)當中間數字大於其下標時,在左半部分區域尋找;

2)當中間數字小於其下標時,在右半部分區域尋找;

public int getnumbersameasindex(int arr) {

if(arr==null || arr.length<=0)

return -1; //代表錯誤

int low=0;

int high=arr.length-1;

while(low<=high) {

int mid= (high+low)>>1;

if(arr[mid]>mid)

high=mid-1;

else if(arr[mid]同理

統計乙個數字:在排序陣列**現的次數。

LeetCode 0到n 1中缺失的數字

非商業,leetcode鏈結附上 進入正題。題目 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。示例 示例 1 輸入 0,1,3 輸出 2 示例 2 輸入 0,1,2,3,4,5,...

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 ...