谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
来源:互联网 发布:虚拟机软件除了vmware 编辑:程序博客网 时间:2024/03/29 14:17
谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
分析:
“假设两个整数数组为A和B,各有N个元素,任意两个数的和组成的数组C有N^2个元素。 那么可以把这些和看成N个有序数列: A[1]+B[1] <= A[1]+B[2] <= A[1]+B[3] <=… A[2]+B[1] <= A[2]+B[2] <= A[2]+B[3] <=… … A[N]+B[1] <= A[N]+B[2] <= A[N]+B[3] <=… 问题转变成,在这N^2个有序数列里,找到前k小的元素”
//得到首中尾3个数的中位数int getMidian(int array[], int low, int high) {int mid = low + ((high - low) >> 1);if (array[mid] > array[high]) {swap(array[mid], array[high]);}if (array[low] > array[high]) {swap(array[low], array[high]);}if (array[low] < array[mid]) {swap(array[mid], array[low]);}return array[low];}int kth_elem(int array[], int low, int high, int th) {int pivot = getMidian(array, low, high);int lowTmp = low;int highTmp = high;while (lowTmp < highTmp) {while (lowTmp < highTmp && array[highTmp] > pivot) {highTmp--;}array[lowTmp] = array[highTmp];while (lowTmp < highTmp && array[lowTmp] < pivot) {lowTmp++;}array[highTmp] = array[lowTmp];}array[lowTmp] = pivot;if (th - 1 == lowTmp) {return array[lowTmp];} else if (th - 1 < lowTmp) {return kth_elem(array, low, lowTmp - 1, th);} else {return kth_elem(array, lowTmp + 1, high, th);}}
1 0
- 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
- 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
- 输入一个递增的数组和一个数字s,找出数组中任意两个数使他们的和正好是这个数字s,如果有任意多对数字的和为s,输出任意一堆数字即可,例如,输入数组[1,2,4,7,11,15]和数字
- ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
- 输入一个递增排序的数组和一个数字sum,在数组中查找两个数,使得他们的和正好是sum
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个按照升序排列的数组和一个数字,在数组中查找两个数,使得他们的和正好是输入的那个数字,要求时间复杂度是O(n),如果有多对数字的和等于输入的数字,输入任意一对即可。
- 输入一个升序数组和一个整数,在数组里面找两个数使它们相加的和为这个整数
- 一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
- 一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
- 输入两个整数,求他们和差商积
- 在数组中求出两个数,使他们的和等于给定的一个数
- 输入两个整数,求他们的和差积商和余数
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 求一个数组中的和为任意一个数的两个元素
- [00020]合并多个字典或映射
- (一) rabbitmq在ubuntu14.04上的部署
- 大事和小事
- shell_链接命令ln与nohup命令使用方法
- Linux操作系统概述
- 谷歌面试题:输入是两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个数怎么做?
- 白话空间统计二十三:回归分析(一)
- VC error c2243:"类型转换" 转换存在,但无法访问
- 太原理工大学java课实验报告
- C++11 标准库实现 time2Str, Str2time
- C# WebService身份验证
- JS改变input的value值不触发onchange事件解决方案
- 一 HBase基础API操作
- MYSQL语句调优:MYSQL Explain 执行计划输出详解