[4, Hard, C++] Median of Two Sorted Arrays
2016-02-13 08:22
393 查看
Problem:
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)).
Analysis:
Solution:
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)).
Analysis:
Solution:
double FindMedianAux(vector<int>& nums1, int start1, int end1, vector<int>& nums2, int start2, int end2, int position) { if (end1 < start1) return double(nums2[start2 + position]); if (end2 < start2) return double(nums1[start1 + position]); int mid1 = start1 + (end1 - start1) / 2; int mid2 = start2 + (end2 - start2) / 2; if (nums1[mid1] > nums2[mid2]) return FindMedianAux(nums2, start2, end2, nums1, start1, end1, position); int lower_part = mid1 - start1 + mid2 - start2 + 1; if (nums1[end1] <= nums2[start2]) { if (position <= end1 - start1) return nums1[start1 + position]; else return nums2[start2 + position - (end1 - start1 + 1)]; } else if (position <= 0) { return double(nums1[start1] < nums2[start2] ? nums1[start1] : nums2[start2]); } else { if (position >= lower_part) return FindMedianAux(nums1, mid1 + 1, end1, nums2, start2, end2, position - (mid1 - start1 + 1)); else return FindMedianAux(nums1, start1, end1, nums2, start2, mid2 - 1, position); } } double FindMedianNumber(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); if ((m + n) % 2 == 0) return (FindMedianAux(nums1, 0, m - 1, nums2, 0, n - 1, (m + n) / 2 - 1) + FindMedianAux(nums1, 0, m - 1, nums2, 0, n - 1, (m + n) / 2)) / 2; else return FindMedianAux(nums1, 0, m - 1, nums2, 0, n - 1, (m + n) / 2);; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性