数组中第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方法 ...
随机推荐
- spring mvc 深入学习
参考文章: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC Spring MVC 3.0 深入总结:http://blog.csdn.net/sunitjy/article/det ...
- 浅谈mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...
- dubbo服务自动化测试搭建
java实现dubbo的消费者服务编写:ruby实现消费者服务的接口测试:通过消费者间接测试dubbo服务接口的逻辑 内容包括:dubbo服务本地调用环境搭建,dubbo服务启动,消费者部署,脚本编写 ...
- Python的第七天
面向对象编程: 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任 ...
- 基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案
分布式Web网站一般都会碰到集群session共享问题,之前也做过一些Spring3的项目,当时解决这个问题做过两种方案,一是利用nginx,session交给nginx控制,但是这个需要额外工作较多 ...
- JVM体系结构与工作方式
JVM全程是java virtual machine(java虚拟机). 以计算为中心来看计算机的体系结构可以分为以下几个部分: 1.指令集:这个计算机所能识别的机器语言的命令集合; 2.计算单元:能 ...
- Sql Server分割字符串函数
-- Description: 分割字符串函数 -- SELECT * FROM dbo.Split('a,b,c,d,e,f,g',',') -- ========================= ...
- Java三大主流框架概述
Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案.但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java W ...
- Postgresql Jsonb字段内含数组属性的删除元素操作
1.创建示例表 create temp table settings as select '{"west": [ {}, {} ]}'::jsonb as value; 2.如下保 ...
- iOS收到Push后播放声音和震动
一.APNS 1.注册 [cpp] [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNoti ...