Leetcode #4 Median of Two Sorted Arrays
来源:互联网 发布:gom引擎npc算法 编辑:程序博客网 时间:2024/05/19 21:40
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)).
Difficulty:Hard
看似比较简单的一题,复杂度要求O(log (m+n)),貌似我只用了O(m+n)。写下思路。
1.首先,用四个int记录两个数组分别头尾的下标,为start1,end1,start2,end2.
2.每次循环,分别剔除这四个下标对应数的最小值与最大值,以此来不断缩减数组。
这里有个很关键的地方,万一所有值都一样大小,千万不能只剔除一个。
while(1){ if(end1<start1) return findM(start2,end2,nums2); if(end2<start2) return findM(start1,end1,nums1); if(end2-start2-start1+end1+2==flag) return findMtwo(start1,end1,nums1,start2,end2,nums2); if(nums1[end1]>=nums2[end2]) //这里特别注意 end1--; else end2--; if(nums1[start1]>=nums2[start2]) //这里特别注意 start2++; else start1++; }3. 直到缩减到,一个数组消失或者两个数组都只剩一个一个数,这时候扔到前面写的方法处,返回所需要的值。
这个作法的复杂度无疑是非常非常可靠的。
class Solution {public: double findM(int start,int end,vector<int>& nums){ double ans; if(start==end){ ans = nums[start]; return ans; } if((end-start)%2==1){ ans = (nums[(start+end)/2]+nums[(start+end)/2+1])/2; if((nums[(start+end)/2]+nums[(start+end)/2+1])%2==1) ans = ans + 0.5; return ans; } else{ ans = nums[(start+end)/2]; return ans; } } double findMtwo(int start1,int end1,vector<int>& nums1,int start2,int end2,vector<int>& nums2){ vector<int> ans; for(int i = start1;i<=end1;i++) ans.push_back(nums1[i]); for(int i = start2;i<=end2;i++) ans.push_back(nums2[i]); return findM(0,ans.size()-1,ans); } double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int len1 = nums1.size(); int len2 = nums2.size(); int mid1,mid2,temp1,temp2; if(len1==0) return findM(0,len2-1,nums2); if(len2==0) return findM(0,len1-1,nums1); int start1 = 0, start2 = 0; int end1 = len1-1,end2=len2-1; int flag; if((len1+len2)%2==1) flag=1; else flag=2; int index1,index2; while(1){ if(end1<start1) return findM(start2,end2,nums2); if(end2<start2) return findM(start1,end1,nums1); if(end2-start2-start1+end1+2==flag) return findMtwo(start1,end1,nums1,start2,end2,nums2); if(nums1[end1]>=nums2[end2]) end1--; else end2--; if(nums1[start1]>=nums2[start2]) start2++; else start1++; } }};
0 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
- 苹果IOS开发者账号总结
- 自定义ListView-下拉刷新和上拉加载
- hdu-1162-Eddy's picture(克鲁斯卡尔求最小生成树)
- sql_slave_skip_counter=N 做了些什么
- HDU 5389 Zero Escape(dp解法详解) 已更新
- Leetcode #4 Median of Two Sorted Arrays
- 如何解决秒杀的性能问题和超卖的讨论
- python读取properties配置文件
- 精通Hibernate——Hibernate中Java对象的状态详解
- C++ 友元(共享数据)
- RelativeLayout用到的一些重要的属性:
- Spring---IOC应用
- MVP模式解读与实战运用(二)
- hdu5240