找出數組中重複的數字

劍指offer第一題,第二題
#include <iostream>
#include <vector>
using namespace std;

//題目1 找出數組中重複的數字
int duplicatearray1(vector<int>& v){
    int n=v.size();
    for(auto x: v)
    {
        cout<<"輸出x:"<<x<<" "<<endl;
        if(x<0|| x>=n)
            return -1;
    }
    for (int i = 0; i <n ; ++i) {
        while(v[v[i]]!=v[i])
        {
            swap(v[i],v[v[i]]);
        }
        if(v[i]!=i) return v[i];
    }
    return -1;
}


//題目2 不修改數組找出數組中重複的數字

int duplicatearray2(vector<int>& v){
    int num=v.size();
    int l=1,r=num-1;
    while (l<r)
    {
        int mid=(r+l)>>1;
        int count=0;
        for (auto x: v)
        {
            if (x >= l && x <= mid)
            {
                count += 1;
            }
        }
        if (count>mid-1+l) r=mid;
        else l=mid+1;
    }

    return l;
}

int main() {
    vector<int> V;
    V.push_back(0);
    V.push_back(4);
    V.push_back(6);
    V.push_back(1);
    V.push_back(3);
    V.push_back(2);
    V.push_back(3);
    int a=duplicatearray1(V);
    cout<<"duplicatearray1數組中重複的數字爲:="<<a<<endl;

    int b=duplicatearray2(V);
    cout<<"duplicatearray2數組中重複的數字爲:="<<b<<endl;

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章