两个有序数组的第n大数
来源:互联网 发布:魔法王座神器进阶数据 编辑:程序博客网 时间:2024/05/17 15:17
两个有序数组,各自含有n个元素,求第n大的元素
1.顺序遍历两个数组,计数变量k统计出现的第k小元素,时间复杂度为O(n)
代码如下:
int getmid(int a[],int b[],int n){int k=0;int i=0,j=0;while(i<n&&j<n){if(a[i]<b[j]){i++;k++;if(k==n)return a[i-1];}else {j++;k++;if(k==n)return b[j-1];}}}
2.二分的方法
取A数组的中间元素mid1,取B数组的中间元素mid2,先比较这两个元素的大小,如果这两个元素相等,则直接返回A[mid1],如果A[mid1]<B[mid2],则mid1左侧的元素可以去掉,B数组右侧的元素可以去掉,这里还要区分数组元素个数为偶数奇数的情况,如果元素个数为偶数,则mid1元素也要去掉。如果A[mid1]<B[mid2]的情况与此类似。时间复杂度为O(logn)
# include <iostream># include <cstdlib>using namespace std;int mid(int a[],int b[],int n){int s1=0,e1=n-1;int s2=0,e2=n-1;int mid1=(s1+e1)/2;int mid2=(s2+e2)/2;while(s1!=e1||s2!=e2){mid1=(s1+e1)/2;mid2=(s2+e2)/2;if(a[mid1]==b[mid2]){return a[mid1];}if(a[mid1]<b[mid2]){if((s1+e1)%2==0){s1=mid1;e2=mid2;}else {s1=mid1+1;e2=mid2;}}else{if((s1+e1)%2==0){e1=mid1;s2=mid2;}else{e1=mid1;s2=mid2+1;}}}return a[s1]<b[s2]?a[s1]:b[s2];}int main(){int a[5]={2,4,5,6,9};int b[5]={1,3,7,8,10};cout<<mid(a,b,5)<<endl;system("pause");return 0;}
0 0
- 两个有序数组的第n大数
- 两个有序数组找第n个数
- 两个有序的数组中找第N个数
- 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- 两个有序数组的第k大的元素
- 寻找两个有序数组的第k小的数
- 两个有序数组中找第N个数
- 如何求两个有序数组的第K个数
- 二分求两个有序数组第k大的数
- 两个有序数组找第k小的数
- 两个有序数组,寻找第k小的数
- 两个有序数组中,寻找第K大的数
- 两个有序数组中第k小的数字
- 两个有序数组找第k大的数
- 如何求两个有序数组的第K个数
- 求两个有序数组的第k小元素
- 4 两个有序数组中第k小的数
- SQL语句,找最近的值;
- RailsCasts20 Restricting Access 限制访问权限
- java webservice 之Axis2 WebServices总结
- 地方过年好没劲东莞分行
- 爱的色放刚回家看了大厦法国红酒可了
- 两个有序数组的第n大数
- Log 作用
- js中操作cookie
- windows 7下的程序 请求以管理员权限运行
- 黑马程序员Android27期“屌丝”逆袭,月薪15000元
- 数据结构-1-内存映射文件原理详解
- RailsCasts21 Super Simple Authentication 超级简单的验证机制
- win7添加逻辑分区
- 黑马程序员——浅复制与深复制