我有兩個陣列2層的元件的每個陣列具有例如一些值:比較C兩個陣列++
int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5, 6};
現在我需要的陣列(A)中的元素與陣列元件相比較(b)中.. 如果有什麼匹配的程序應該返回一個錯誤或打印「錯誤有重複的值」等。 在上述情況下,它應該返回一個錯誤coz a [0] = b [1],因爲兩者具有相同的值。
我該怎麼做?
我有兩個陣列2層的元件的每個陣列具有例如一些值:比較C兩個陣列++
int a[] = {1, 2, 3, 4};
int b[] = {0, 1, 5, 6};
現在我需要的陣列(A)中的元素與陣列元件相比較(b)中.. 如果有什麼匹配的程序應該返回一個錯誤或打印「錯誤有重複的值」等。 在上述情況下,它應該返回一個錯誤coz a [0] = b [1],因爲兩者具有相同的值。
我該怎麼做?
如果陣列是這個小,我只想做一個蠻力方法,並遍歷兩個數組:
for (int i=0;i<4;++i)
{
for (int j=0;j<4;++j)
{
if (a[i] == b[j])
{
// Return an error, or print "error there is a duplicate value" etc
}
}
}
如果你將要處理大陣,你可能要考慮一個更好的算法,但是,因爲這是O(n^2)。
例如,如果您的某個數組已排序,您可以更快速地檢查匹配項,特別是在數組長度變大時。但是,如果你的數組總是總是少數幾個元素的話,我不會爲更精細的東西而煩惱。
+1表示這是一個二次複雜算法,不適合大數據集。 – stinky472 2010-06-30 17:38:34
謝謝我剛添加標誌和循環後 如果別的意見 並做:) 謝謝 – SolidSnake 2010-06-30 17:47:11
假設兩個數組進行排序,可以一步到位,雖然他們他們是這樣的:
// int array1[FIRSTSIZE];
// int array2[SECONDSIZE];
for(int i=0, j=0; i < FIRSTSIZE && j < SECONDSIZE;){
if(array1[i] == array2[j]){
cout << "DUPLICATE AT POSITION " << i << "," << j << endl;
i++;
j++;
}
else if(array1[i] < array2[j]){
i++;
}
else{
j++;
}
}
這應該有線性複雜,但如果他們整理它纔會起作用。
排序數組的解決方案已經發布。如果未對數組進行排序,則可以從每個數組中構建一個集(例如std::set
或散列集),並查看這些集是否不相交。您可能必須將值對索引對存儲在集合中才能找出哪個索引重複(並適當地重載比較運算符)。這可能會給O(n log n)的複雜性。
我喜歡這個答案。我應該注意到:散列集合在TR1中實現。 std :: tr1 :: unordered_set和boost :: unordered_set。 TR1在GCC和Visual Studio中均實現,因此std :: tr1 :: unordered_set應該是「足夠標準」的。假設一切都與unordered_set一起工作,你應該能夠在O(n)中做到這一點。 – Dragontamer5788 2010-06-30 21:49:56
//v={1,2,3,4}; vector
//v1={1,2,3,4} vector
bool f=0;
if(equal(v.begin(),v.end(),v1.begin())) //compare two vector, if equal return true
{
f=1;
}
}
if(f==1)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
enter code here
它們會被排序嗎? – 2010-06-30 17:35:32
數組是否已知被排序? – 2010-06-30 17:35:43