2013年1月26日 星期六

[C Programming] 支配值數目

已知f[]和g[]兩個整數數列(已由小到大排列且各數列中無重複元素),
請寫一個程式,輸出f[]中的每一個元素比g[]中的每一個元素大的個數的總數。
也就是:
f[0]比g[]中的多少個還大,
f[1]比g[]中的多少個還大,
f[2]比g[]中的多少個還大,
......的加總。

解法:
因為是排序過的數列,
所以只要從小的index往上比較,
當f[x]>g[y]的時候,f[x+1]及其後也會大於g[y]。
依此特性來搜尋,碰到f[x]≦g[y]時,遞增x值,
f[x]>g[y]時,遞增y值並把計數加上相對應的個數就可以了。


Code大概長這樣:
int gt_cnt(int f[], int g[], int m, int n)
{
 int cnt = 0, _fi = 0, _gi = 0;
 while( (_fi < m) && (_gi < n) )
  if(f[_fi] <= g[_gi]) 
   _fi++;
  else
  { cnt += m-_fi; _gi++; } 
 return cnt;
}

沒有留言:

張貼留言