請寫一個程式,輸出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; }
沒有留言:
張貼留言