两个有序数组,A[k]和B[k]长度都为k。求前k个最小的(a[i]+b[j])
2012-10-03 10:50
801 查看
设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中最小的那一边的数;
因为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中最小的那一边的数;
相关文章推荐
- 给出两个长度为N的有序数组A和B 给出求中位数的算法
- 求两个有序数组两两相加的值最小的K个数
- 两个有序数组元素之积、和的最小K个值
- 给定两个有序的n长度的数组,如何找出这两个数组合并后的中位数?
- java 随机长度10位数组,输入两个数字,找出差值最小的
- 算法-求两个有序数组两两相加的值最小的K个数
- 两个有序数组长度分别为m,n,最多m+n次查找找出相同的数
- 求两个有序数组的中位数(无论数组长度是否一样)
- 求两个有序数组两两相加的值最小的K个数
- 有序数组长度为N 元素出现的长度为 大于等于 N 除 4 的最小的数
- 给定两个长度相同,分别有序的数组A和B,求两个数组中所有数的中位数
- 算法-求两个有序数组两两相加的值最小的K个数
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- 求两个有序数组中,各个元素的c差值最小
- 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回
- 两个有序数组元素之和的最小K个值
- 两个有序数组,从中各取一个组成pair,求和最小的前K个pair(杨氏矩阵top k问题)
- 每日一题(95) - 两个有序数组元素之积、和的最小K个值
- 【面试题】求两个有序数组两两相加的值最小的K个数
- 算法面试题——两个有序数组,将一个数组放入另一个空间很大的数组,要求合并之后依然有序,时间复杂度要求最小,不使用额外的数组。