剣はオファー53-II0〜n-1 C ++の欠落している番号を指します

タイトル説明

ここに画像の説明を挿入します

ソリューションの二分法

手間を省くことができれば、自分で書くことはしません。
前の質問よりもはるかに簡単です。唯一の問題は、[0,1]などの順序付けられた配列を出力する必要がある場合、2番目の質問では、対応する数と等しくない最初の添え字を見つける必要があることです。時間、数を説明します間隔はその時であり、数の間隔が `` `[l、mid-1]にあることを示します

class Solution {
    
    
public:
    int missingNumber(vector<int>& nums) {
    
    
        int l = 0, r = nums.size() - 1;
        //cout<< "l:"<<l <<" "<< "r:" << r;
        while(l <= r) {
    
    
            int mid = (l + r) >> 1;
            if(mid == nums[mid]) l = mid + 1;
            else r = mid - 1;
            //cout<< "l:"<<l <<" "<< "r:" << r;
        }
        return l;
    }
};

ここに画像の説明を挿入します

時間計算量O(logN)
空間計算量O(N)

おすすめ

転載: blog.csdn.net/qq_42883222/article/details/112368813