题目描述:
给定两个整型数组A和B。我们将A和B中的元素两两相加可以得到数组C。
譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]。
现在给你数组A和B,求由A和B两两相加得到的数组C中,第K小的数字。
输入:
输入可能包含多个测试案例。
对于每个测试案例,输入的第一行为三个整数m,n, k(1<=m,n<=100000, 1<= k <= n *m):n,m代表将要输入数组A和B的长度。
紧接着两行, 分别有m和n个数, 代表数组A和B中的元素。数组元素范围为[0,1e9]。
输出:
对应每个测试案例,
输出由A和B中元素两两相加得到的数组c中第K小的数字。
样例输入:
2 2 3
1 2
3 4
3 3 4
1 2 7
3 4 5
样例输出:
5
6
来源:
Google面试题
看这道题就要知道一定不能用一般的方法做,因为不能存放那么大的数组,这里用二分法,并且只要找的次数就可以与 k进行比较
-
#include<iostream>
-
#include<stdio.h>
-
#include<cstring>
-
#include<math.h>
-
#include<algorithm>
-
usingnamespacestd;
-
inta[100005],b[100005];
-
longlongm,n,k;
-
intjudge(longlongmi,longlongk)
-
{
-
longlongi,jsum=0;
-
j=n-1;
-
-
for(i=0;i<m;i++)
-
{
-
while(a[i]+b[j]>mi&&j>=0)j--;
-
-
-
if(j<0)break;
-
sum=sum+j+1;
-
-
if(sum>=k)return1;
-
}
-
return0;
-
}
-
intmain()
-
{
-
inti;
-
longlongR,L,mid;
-
while(scanf("%lld%lld%lld",&m,&n,&k)!=EOF)
-
{
-
memset(a,0,sizeof(a));
-
memset(b,0,sizeof(b));
-
for(i=0;i<m;i++)scanf("%d",&a[i]);
-
for(i=0;i<n;i++)scanf("%d",&b[i]);
-
sort(a,a+m);
-
sort(b,b+n);
-
L=a[0]+b[0];
-
R=a[m-1]+b[n-1];
-
while(L<R)
-
{
-
mid=(L+R+1)/2;
-
if(judge(mid-1,k))R=mid-1;
-
elseL=mid;
-
}
-
printf("%lld\n",L);
-
}
-
return0;
-
}
相关推荐
java基础面试题数组中重复的数字本资源系百度网盘分享地址
java基础面试题数组中只出现一次的数字本资源系百度网盘分享地址
java基础面试题数组中出现次数超过一半的数字本资源系百度网盘分享地址
java基础面试题数组中逆序对本资源系百度网盘分享地址
数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题数字电路公司面试试题...
java基础面试题旋转数组的最小数字本资源系百度网盘分享地址
c语言面试题 c语言面试题之双指针数组中的K-diff数对
Java基础知识面试题数组和字符串相关的选择题.pdf
c语言面试题 c语言面试题之哈希表找到所有数组中消失的数字
题目描述: 在一个长度为n的数组里的所有数字... 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104025402
java基础面试题把数组排成最小的数
title:面试题03 数组中重复的数字 introduction: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中...
面试题56 - I. 数组中数字出现的次数题目链接面试题56 - I. 数组中数字出现的次数题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。传出
数组 - 需要参加面试的人
c++面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试...
面试题总结:数组和链表的区别 数组和链表.pdf
java基础面试题数字在排序数组中出现的次数本资源系百度网盘分享地址
google面试题google面试题
剑指offer面试题库中第三题的C语言代码。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
面试题53 - I. 在排序数组中查找数字 I题目链接面试题53 - I. 在排序数组中查找数字 I题目描述统计一个数字在排序数组中出现的次数。题解public