劍指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; }
找出數組中重複的數字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.