面試題53 II 0 n 1中缺失的數字

2021-10-04 22:09:52 字數 1325 閱讀 5548

題目:乙個長度為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,1]表示陣列長度為n-1=2,所以n=3,共有3個數字,所以在之間的是[0,1,2];不能理解為只有2個數字,不缺失數字。這一點很重要。

思想1:兩次迴圈,不建議使用,沒有充分利用有序。

int

missingnumber

(vector<

int>

& nums)

int sum1 =0;

int sum2 =0;

for(

int i =

0;i <=nums.

size()

;i++

)for

(int i =

0;i < nums.

size()

;i++

)return sum1-sum2;

;}

思想2:一次迴圈 o(n)

int

missingnumber

(vector<

int>

& nums)

}//表示缺失的元素是末尾的,nums.size=n-1,所以返回n-1即可.

return nums.

size()

;}

思想3:二分查詢,o(logn)建議使用

//用二分法,它是0~n-1的資料在對應0~n-1的位置上放著,所以可以利用下標和資料是否相等來判斷,如果mid==nums[mid]那就

//表示前面的資料存放都正確,那麼l=mid+1,如果不等表示前面已經有了缺失的資料,所以r=mid-1,一次類推,直至l>r就返回mid+1

intmissingnumber2

(vector<

int>

& nums)

else

//左半部分有問題

}return l;

}

加油哦!?。

面試題53 II 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 要點 遞增,有序,特點 ...

面試題53 II 0 n 1中缺失的數字

題目 乙個長度為n 1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0 n 1之內。在範圍0 n 1內的n個數字中有且只有乙個數字不在該陣列中,請找出這個數字。示例1 輸入 0,1,3 輸出 2 方法一 二分法 可以發現規律,如果下標 index nums index 的話,所缺的值在中...

面試題53 II 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 class solution el...