1.題目
給一個數組,單調性是遞增的,需要找到缺失的數字,加上這個數字就變為等差數組了。
2.算法原理
這里用二分來解決,而二段性是根據下標區分,臨界值前的數字于下標相對應,臨界值后的于下標相差1,就可以以此為判斷基準進行二分查找,等于的情況是在下標不相等的區域,所以nums[mid]!=mid就把right=mid,left就是mid+1,也可以得到mid的確定公式有沒有+1,避免死循環。最后還有一種情況,就是數組是等差的,不過少了最后一位,如[0,1,2,3]少了4,則left和right就會在3停下,就需要判斷如果下標和值相等就說明是在后一位,就需要+1。
3.代碼實現
class Solution
{
public:int missingNumber(vector<int>& nums){int left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left + 1) / 2;if (nums[mid] == mid) left = mid + 1;else right = mid;}return nums[left] == left ? left + 1 : left;}
};