C语言名题系列:支配值数目

  题目:给定两个排序好的数组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;
}



Related posts

此条目发表在 C/C++ 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。

C语言名题系列:支配值数目》有 11 条评论

  1. cloudxiao 说:

    应该是15组吧?最后的9你只比较了一次啊

  2. colin 说:

    以前为了过三级考,学了这东西,上机笔试都是优,呵呵。现在都还回去了

  3. 晕死,都是一些技术性博客。。让我回访我怎么看得明白嘛…

  4. 泡面 说:

    看来博主最近在学C啊,努力,加油。

  5. 阿吴 说:

    如果一个数组很长,一个较短,是不是可以做个时间的优化?

  6. 619 说:

    不要跟我提C语言啊!!!!

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>