数组中第K小的数字(Google面试题)
http://ac.jobdu.com/problem.php?pid=1534
题目1534:数组中第K小的数字
时间限制:2 秒
内存限制:128 兆
特殊判题:否
提交:1120
解决:208
- 题目描述:
-
给定两个整型数组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面试题
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; //计算arr1和arr2所有组合相加结果中小于或等于mid的个数
long long judge(long long arr1[],long long m,long long arr2[],long long n,long long mid)
{
long long cnt=,j=n;
for(long long i=;i<=m;i++)
{ while(j>=&&arr1[i]+arr2[j]>mid)
j--;
cnt+=j; /* 超时
for(long long j=1;j<=n;j++)
if(arr1[i]+arr2[j]<=mid)
cnt++;
*/
}
return cnt;
}
long long find_kth(long long arr1[],long long m,long long arr2[],long long n,long long k)
{
long long low=arr1[]+arr2[];
long long high=arr2[m]+arr2[n];
long long mid;
while(low<=high)
{
mid=(low+high)/;
long long temp=judge(arr1,m,arr2,n,mid);
if(k==temp)
return mid;
else if(k<temp)
high=mid-;
else
low=mid+;
}
return low;
}
int main()
{
long long m,n,k;
long long arr1[],arr2[];
while(scanf("%lld%lld%lld",&m,&n,&k)!=EOF)
{
for(long long i=;i<=m;i++)
scanf("%lld",arr1+i);
for(long long i=;i<=n;i++)
scanf("%lld",arr2+i);
sort(arr1+,arr1+m+);
sort(arr2+,arr2+n+);
printf("%lld\n",find_kth(arr1,m,arr2,n,k));
}
return ;
}
数组中第K小的数字(Google面试题)的更多相关文章
- 九度OJ 1534 数组中第K小的数字 -- 二分查找
题目地址:http://ac.jobdu.com/problem.php?pid=1534 题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[ ...
- 九度OJ 题目1534:数组中第K小的数字(二分解)
题目链接:点击打开链接 题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6 ...
- 九度oj 题目1534:数组中第K小的数字
题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]. 现在给你数组A和B ...
- 九度 1534:数组中第K小的数字(二分法变形)
题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C.譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6].现在给你数组A和B,求 ...
- 题目1534:数组中第K小的数字 ——二分
http://ac.jobdu.com/problem.php?pid=1534 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C.譬如A为[1,2],B为[3,4].那么由A和B中 ...
- [LeetCode] Kth Largest Element in an Array 数组中第k大的数字
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- [LeetCode] 215. Kth Largest Element in an Array 数组中第k大的数字
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- 前端算法题:找出数组中第k大的数字出现多少次
题目:给定一个一维数组,如[1,2,4,4,3,5],找出数组中第k大的数字出现多少次. 例如:第2大的数是4,出现2次,最后输出 4,2 function getNum(arr, k){ // 数组 ...
- #7 找出数组中第k小的数
「HW面试题」 [题目] 给定一个整数数组,如何快速地求出该数组中第k小的数.假如数组为[4,0,1,0,2,3],那么第三小的元素是1 [题目分析] 这道题涉及整数列表排序问题,直接使用sort方法 ...
随机推荐
- sap 取货币之间汇率
FORM FRM_GET_KURSK USING PV_KURST "M PV_FCURR PV_TCURR PV_PRSDT CHANGING PV_KURSK. DATA: LV_RAT ...
- ios中图片拉伸用法
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCap ...
- OAF_开发系列10_实现OAF动态LOV设定
20150712 Created By BaoXinjian
- vue.js组件
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- [Mongodb] Relica Set复制集集群简单搭建--持续更新
这里我们搭建一个没有访问控制,奇数个Set没有仲裁者的集群 1.三个配置文件添加 replication.replSetName:"Replica_test" 并启动三个实例2.连 ...
- dedecms 图片集上传时提示错误信息“(FILEID:1|2|3..)“的解决
网上看到很多朋友遇到使用织梦程序一段时间后,发现上传图集时候老是失败,提示"提示FILEID:X错误,缩略图显示为红色Error"下面截图错误: 这问题今天也让我头疼了半天,好好的 ...
- 恢复CRM plugin
1 使用工具 XrmToolbox http://xrmtoolbox.codeplex.com/releases/view/611881 2 连接:可以使用网络连接,也可以使用本地连接 3 使用 A ...
- css相对定位+浮动实现元素位置互换
1.设置元素透明度 opacity:0.5; // w3c filter:alpha(opacity=50); //IE 2 position:relative; float:left; 一起使用的效 ...
- hrbust1279
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1279 int main() { l ...
- 天地图应用ArcGIS发布的服务
本文包含三个部分:利用ArcMap将Excel的数据转化为ArcGIS MXD文件.利用ArcMap发布服务.天地图添加ArcGIS发布的服务. 一 MXD文件的生成 假设在Excel中存有两个点的坐 ...