且兩個陣列中的元素都各自不相同(Ex. f[]:1,3,5,7,9 g[]:3,5,7,8,10)
請寫一個程式,算出兩個陣列彼此之間有多少組相同的資料,
以範例來說有3 5 7共3組。
但請不要使用暴力法,這樣會是O(n^2)。
提示:善用已排序的特性。
解:
因為同陣列的元素都各自不相同且排序,
所以當:
1. f[i] < g[j] → i++;
2. f[i]==g[j] → i++; j++; cnt++; (因為這組相等不會再重複出現了)
3. f[i] > g[j] → j++;
一直到其中一個index先跑到底為止。
若兩陣列長度皆為n,最多只要比對2n次就可以結束了!
Code大概長這樣:
int eq_cnt(int f[], int g[], int m, int n) { int cnt = 0, i = 0, j = 0; while( (i < m) && (j < n) ) if(f[i] < g[j]) i++; else if(f[i] == g[j]) { i++;j++;cnt++; } else j++; return cnt; }
沒有留言:
張貼留言