两个有序数组,A[k]和B[k]长度都为k。求前k个最小的(a[i]+b[j])

来源:互联网 发布:三国杀2015珍藏版淘宝 编辑:程序博客网 时间:2024/05/17 08:08

设A={A1,A2,A3,A4,A5,A6,.......} ,B={B1,B2,B3,B4,B5,B6,.......}

因为A和B都是有序的数组,必须充分的利用这点,可能有同学,看到有同学觉得这个题目比较容易,直接将所有的组合都计算出来,然后取最小的K个,其实出题的人是要大家考虑这道题的时间复查度,上面的解法的时间复杂度为o(n2),出题的人的目的是要时间复杂度最小。

 

下面分析如下:

 

因为A和B都是有序的数组,那么最小的那个肯定是a[0]+b[0],举例如下:

A={1,2,4,7,9}

B={2,3,6,8,10}

 

第一个:

1+2=3;

1+3=4;

2+2=4;

2+3=5;

4+2=6;

1+6=7;

4+3=7;

2+6=8;

1+8=9;

7+2=9;

 

 

第一个数:

a[0]+b[0],

 

第2个数为A2-A1,和B2-B1中最小的那一边的数;

 

原创粉丝点击