287. Find the Duplicate Number


題目鏈接


題解:

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        map<int,int>a;
        vector<int>::iterator it;
        for(it=nums.begin();it!=nums.end();it++){
            if(a[*it]==0){
                a[*it]=1;
            }else{
                return *it;
            }
        }
    }
};

這是利用map來求解,不符合題意,但是AC了。空間複雜度爲O(n)

,時間複雜度O(n);


大神題解:(利用折半查找來求重複的值,因爲是順序輸入的1-n,

當有一個數值重複時,左右總有一半會多一個數字,所以就像那一半

縮小,最終找到答案)

class Solution {

public:

int findDuplicate(vector<int>& nums) {
    int n=nums.size()-1;
    int low=1;
    int high=n;
    int mid;
    while(low<high){
        mid=(low+high)/2;
        int count=0;
        for(int num:nums){
            if(num<=mid) count++;
        }
        if(count>mid) high=mid;
        else low=mid+1; 
    }
    return low;
}
};


發佈了32 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章