题目:给定两个排序好的数组f[]和g[],计算满足f[i]>g[j]的对数!如f:2,3,5,7,9和g:1,2,4,6,7中,2>1,3>1,3>2,5>1,5>2,5>4,7>1,7>2,7>4,7>6,9>7,9>6,9>4,9>2,9>1!有15组这样的关系,所以答案为15。
老规矩,尽量使代码简短!最少的元素访问次数!
本题的关键在于,利用数组排序好的性质!思路如下:f[i]大于g[j],则f[i]后面的元素都大于g[j]。利用一个变量count来记录满足大于关系的对数,如果f[i]>g[j]时,count增加f中i后的元素个数,并将j后移,否则将i后移,拿f中更大的元素与当前g[j]比较!这样一来,当访问完其中一个数组的元素时,便得出了答案!没有必要将两个数组都走一遍!
代码及真相:
int gt_count(int f[], int g[], int m, int n)
{
int i, j;
int count;
count = i = j = 0;
while (i < m && j < n)
if (f[i] <= g[j])
i++;
else
j++, count += m - i;
return count;
}
{
int i, j;
int count;
count = i = j = 0;
while (i < m && j < n)
if (f[i] <= g[j])
i++;
else
j++, count += m - i;
return count;
}
应该是15组吧?最后的9你只比较了一次啊
是的,大意了。已经更正。
以前为了过三级考,学了这东西,上机笔试都是优,呵呵。现在都还回去了
呵呵。这些题目都不需要什么语法知识,关键是要动脑筋!
晕死,都是一些技术性博客。。让我回访我怎么看得明白嘛…
呵呵。改天也舒情一下!美女别走哦!
看来博主最近在学C啊,努力,加油。
没有。做做题目而以。最近在学缓冲区溢出
如果一个数组很长,一个较短,是不是可以做个时间的优化?
函数走完短的一个数组时就结束了,悬殊再大,也只取决于短的那个数组了。
不要跟我提C语言啊!!!!