且兩個陣列中的元素都各自不相同(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;
}
沒有留言:
張貼留言