Leetcode - 4. Median of Two Sorted Arrays
2016-05-06 19:42
417 查看
题目简介
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Simple solution: O(m+n)
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); int* a = new int[m+n]; int p1=0; int p2=0; int end = (m+n)/2+1; int count=0; int flag= 0; double res=0.0; if((m+n)%2==0){ flag = 1; }else{ flag = 0; } while(p1<m && p2<n){ if(nums1[p1]<=nums2[p2]){ a[count++]=nums1[p1++]; }else{ a[count++]=nums2[p2++]; } if(count==end){ if(flag){ res = (double(a[count-1])+double(a[count-2]))/2; }else{ res= double(a[count-1]); } return res; } } if(p1==m){ while(p2<n){ a[count++]=nums2[p2++]; } } if(p2==n){ while(p1<m){ a[count++]=nums1[p1++]; } } if(flag){ res = (double(a[end-1])+double(a[end-2]))/2; }else{ res = double(a[end-1]); } return res; } };
二分法:O(log (m+n))
摘自Leetcodeclass Solution { public: int getkth(int s[], int m, int l[], int n, int k){ // let m <= n if (m > n) return getkth(l, n, s, m, k); if (m == 0) return l[k - 1]; if (k == 1) return min(s[0], l[0]); int i = min(m, k / 2), j = min(n, k / 2); if (s[i - 1] > l[j - 1]) return getkth(s, m, l + j, n - j, k - j); else return getkth(s + i, m - i, l, n, k - i); return 0; } double findMedianSortedArrays(int A[], int m, int B[], int n) { //Note: 当m+n为奇数,l==r;当m+n为偶数, l+1==r. int l = (m + n + 1) >> 1; int r = (m + n + 2) >> 1; return (getkth(A, m ,B, n, l) + getkth(A, m, B, n, r)) / 2.0; } };
相关文章推荐
- 1925: [Sdoi2010]地精部落 dp, 抖动子序列
- WCF:调用方未由服务器进行身份验证
- WCF中常用的binding方式
- angular---常用指令总结
- Android网络通信之HttpURLConnection
- 设计模式之:工厂方法模式
- java中的栈和队列的基础API
- QQ通信协议
- 快速幂算法
- iOS学习UI之UITextfield
- 上传项目到github上的命令
- 魏则西之死,百度到底有没有责任?
- Android odex文件反编译
- 公司考勤只需一条Sql语句
- bzoj2038分块
- 多线程(一)
- 5、jQuery的Ajax与Java通过GET方式交互
- hdu3416 判断最短路是否唯一(每条边只能走一次)
- 直接插入排序
- 一箭穿心