两个有序数组,判断一个给定的数p在合并后的位置
来源:互联网 发布:p2p java 借款 源代码 编辑:程序博客网 时间:2024/04/28 15:24
有两个有序数组,给定的一个数p(p是两个数组中的任意一个数,也可能同时存在于两个数组之中),判断这个数p在两个数组合并后的大数组的位置。
要求:空间复杂度为O(1),即不能真正合并两个数组
以下代码实现,其时间复杂度为O(log(m)+log(n)):
#include <iostream>#include<vector>using namespace std;int getkth(vector<int> arrays,int left,int p){int i =0;for( i =left;i<arrays.size();i++){if(arrays[i]>=p){i--;break;}}return i;}int find(vector<int> a,int aleft,int aright,vector<int> b,int bleft,int bright ,int p){int amid= (aleft+aright)/2;int bmid= (bleft+bright)/2;if(aleft>=aright){return aleft+getkth(b,bleft,p)+2;}if(bleft>=bright){return bleft+getkth(a,aleft,p)+2;}if(a[amid]<=b[bmid]){if(p>b[bmid])return find(a,amid+1,aright,b,bmid+1,bright,p);if(p<=b[bmid]&&p>a[amid])return find(a,amid+1,aright,b,bleft,bmid,p);if(p<=a[amid])return find(a,aleft,amid,b,bleft,bmid,p);}else{if(p>a[amid])return find(a,amid+1,aright,b,bmid+1,bright,p);if(p<=a[amid]&&p>b[bmid])return find(a,aleft,amid,b,bmid+1,bright,p);if(p<=b[bmid])return find(a,aleft,amid,b,bleft,bmid,p);}}int main () {int num = 7;int p=5;int a[]={1,2,5,5,5,5,6};int b[]={2,3,5,7,9,10,11};vector<int> ai;vector<int> bi;for(int i=0;i<num;i++){ai.push_back(a[i]);bi.push_back(b[i]);}int pos = find(ai,0,ai.size()-1,bi,0,bi.size()-1,p);cout<<pos<<endl;}
若有改进之处,望高手指正。
0 0
- 两个有序数组,判断一个给定的数p在合并后的位置
- 判断一个有序数组中是否有两个数的和等于给定的数
- 给定两个有序数组,找出合并之后的数组中位数
- 给定两个有序的n长度的数组,如何找出这两个数组合并后的中位数?
- 合并两个有序数组为一个新的有序数组
- 查找有序数组中等于给定值的两个数
- 两个有序数组,求合并后的中间大的数。要求效率最高。
- C++实现:合并两个有序的数组,合并后的数组依然有序
- C语言实现:合并两个有序的数组,合并后的数组依然有序
- 合并两个有序的数组
- 合并两个有序的数组
- 两个有序单链表的合并&两个有序数组的合并
- 在数组中求出两个数,使他们的和等于给定的一个数
- 在一个有序的旋转数组中,查找给定值
- 有n个有序的整数放在一维数组中,输入一个数,将该数放入数组合适的位置,使插入该数后,数组中的元素仍然有序;
- 合并有序的两个数字数组为一个
- 将两个有序的数组合并成一个有序的数组
- 有一个int型数组,每两个相邻的数之间的差值不是1就是-1.现在给定一个数,要求查找这个数在数组中的位置
- scrollview去掉头部阴影
- eclipse maven 中使用 mybatis-generator
- ORACLE收集统计信息
- 每天一道算法题(35)——删除字符串首尾的空格
- 复制对象时勿忘其每一个成分(Effective C++_12)
- 两个有序数组,判断一个给定的数p在合并后的位置
- python-文件替换二进制脚本
- 代码ajax
- 多线程学习笔记-01
- hdu4747 Mex (线段树 好题)
- QQ客服
- iOS开发系列课程(03) --- UIView详解
- HttpContext.Current并非无处不在
- 第2周 项目1 - C/C++语言中函数参数传递的三种方式