leetcode-4-Median of Two Sorted Arrays
来源:互联网 发布:免费下载绘图软件 编辑:程序博客网 时间:2024/06/08 08:24
难度
hard
描述
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)).
示例
nums1 = [1, 3]nums2 = [2]The median is 2.0nums1 = [1, 2]nums2 = [3, 4]The median is (2 + 3)/2 = 2.5
我的代码
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int i = 0,j = 0; vector<int> temp; while(i < nums1.size() && j < nums2.size()) { if(nums1[i] <= nums2[j]) { temp.push_back(nums1[i]); i++; } else { temp.push_back(nums2[j]); j++; } } while(i < nums1.size()) { temp.push_back(nums1[i]); i++; } while(j < nums2.size()) { temp.push_back(nums2[j]); j++; } int num = nums2.size() + nums1.size(); bool flag = num%2==0?true:false; double medium = 0; num = (num - 1) / 2.0; if(flag) medium = (temp[num] + temp[num+1])/2.0; else medium = temp[num]; return medium; }};
我的主要思想就是先归并两个有序的表,然后在找medium数。空间复杂度O(m+n)
更优解
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int N1 = nums1.size(); int N2 = nums2.size(); if (N1 < N2) return findMedianSortedArrays(nums2, nums1);//保存左边比右边个数多 if (N2 == 0) return ((double)nums1[(N1-1)/2] + (double)nums1[N1/2])/2; //元素数据小的链表为零时 int lo = 0, hi = N2 * 2; while (lo <= hi) { int mid2 = (lo + hi) / 2; //获取分割点 int mid1 = N1 + N2 - mid2; double L1 = (mid1 == 0) ? INT_MIN : nums1[(mid1-1)/2]; double L2 = (mid2 == 0) ? INT_MIN : nums2[(mid2-1)/2]; double R1 = (mid1 == N1 * 2) ? INT_MAX : nums1[(mid1)/2]; double R2 = (mid2 == N2 * 2) ? INT_MAX : nums2[(mid2)/2]; if (L1 > R2) lo = mid2 + 1; //链表必须满足l1<R2,l2<R1 else if (L2 > R1) hi = mid2 - 1; else return (max(L1,L2) + min(R1, R2)) / 2; } return -1;}
这个算法的实现内部有点二分查找的意思。比较难理解。主要的思想就是找到两个数l,r,这个两个数把左右分割。例如
1,2,3,4,51,1,1,1
假如 mid2 = 2, 所以可以得到mid1 = 4 + 5 - mid2 = 7.分割成:
[1 2 3 (4/4) 5 ] [1/1 1 1 ]
所以l1=4,R1=4,l2=1,R2=1.
最终我们需要满足的条件是:L1 < R1 && L1 < R2 && L2 < R1 && L2 < R2.
因为链表为有序表,所以L1 < R1以及L2 < R2是始终满足的。所以只要满足L1 < R2 && L2 < R1即可。
最终需要的值就是:
当一个链表为空时:
N Index of L / R1 0 / 02 0 / 13 1 / 1 4 1 / 2 5 2 / 26 2 / 37 3 / 38 3 / 4
我们可以总结出: L = (N-1)/2, R = N/2。
阅读全文
2 0
- Leetcode 4 Median of Two Sorted Arrays
- LeetCode 4 - Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- Leetcode 4 Median of Two Sorted Arrays
- [leetcode 4] Median of Two Sorted Arrays
- LeetCode 4:《Median of Two Sorted Arrays》
- [Leetcode] 4 - Median of Two Sorted Arrays
- leetcode|4|Median of Two Sorted Arrays
- [Leetcode]4Median of Two Sorted Arrays
- leetcode 4 Median of Two Sorted Arrays
- LeetCode #4 Median of Two Sorted Arrays
- LeetCode-4-Median of Two Sorted Arrays
- LeetCode 4 Median of Two Sorted Arrays
- leetcode 4 Median of Two Sorted Arrays
- LeetCode 4 Median of Two Sorted Arrays
- Leetcode[4] Median of Two Sorted Arrays
- LeetCode 4 - Median of Two Sorted Arrays
- leetcode 4 -- Median of Two Sorted Arrays
- python07集合
- 使用padding-top需要注意一些问题
- 面对对象的三个基本特征(继承)(this和super)
- Drupal--plupload模块
- 【LeetCode】104 Maximum Depth of Binary Tree
- leetcode-4-Median of Two Sorted Arrays
- 2017暑假集训 div1 连通图(2)
- “玲珑杯”ACM比赛 Round #18 C -- 图论你先敲完模板
- 判断链表是否有交点若有找出交点
- JSON详细学习之Gson in JAVA
- 适配器模式
- 冒泡排序简单改进
- python基础之异常处理、调试和正则表达式
- 表单