排序查找算法实战---Median of Two Sorted Arrays
来源:互联网 发布:哪个租房软件最靠谱 编辑:程序博客网 时间:2024/05/29 03:33
题目描述:
求两个有序数组的中位数(Leetcode 4)
题目求解:
求解核心思想:转化为求第k小元素
方法一:归并排序
- 归并到第k个为止
- 时间复杂度O(k)
实现代码(c++):
class Solution {public: int findKth(vector<int> a, vector<int> b, int k){ int n1=a.size(),n2=b.size(); int i=0,j=0; //利用归并排序思想。归并排序就是说哪个数组没用完,就用哪个数组 for(;(i<n1)&&(j<n2);){ --k; //首先,如果a[i]<b[j],则考虑a[i] if(a[i]<b[j]){ //k=0时就返回a[i](表示较小数组中就可以找到第k小的值) if(k==0){ return a[i]; } //k!=0就递增i ++i; } //其次,则表示a[i]>=b[j].考虑b[j],此时若k=0则返回b[j] else if(k==0){ return b[j]; } //最后,a[i]>=b[j]时若k!=0则递增j else { ++j; } } //循环外,若a数组被耗尽则返回b[j+k-1],若b数组被耗尽则返回a[i+k-1] return (i>=n1)?b[j+k-1]:a[i+k-1]; } double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m=nums1.size(),n=nums2.size(); int total=m+n; if(total%2){ return findKth(nums1,nums2,(total+1)/2); } else{ return (findKth(nums1,nums2,total/2)+findKth(nums1,nums2,total/2+1))*0.5; } }};
class Solution {public: int findKth(vector<int> a, vector<int> b, int k){ int n1=a.size(),n2=b.size(); //假设n1<=n2,若出现n1>n2则颠倒a,b if(n1>n2) return findKth(b,a,k); if(n1==0)//若n1为0,则第k小的数在b中b[k-1]位置 return b[k-1]; if(k==1)//第一个最小的数 return min(a[0],b[0]); //将k划分为两部分 int pa=min(k/2,n1),pb=k-pa; if(a[pa-1]<b[pb-1]){//这表示a[0]到a[pa-1]的元素都在a和b合并之后的前k小的元素中。换句话说,a[pa-1]不//可能大于两数组合并之后的第k小值,所以我们可以将其抛弃。 a.erase(a.begin(),a.begin()+pa); return findKth(a,b,k-pa); } else if(a[pa-1]>b[pb-1]){//分析同上 b.erase(b.begin(),b.begin()+pb); return findKth(a,b,k-pb); } else{ return a[pa-1]; } } double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m=nums1.size(),n=nums2.size(); int total=m+n; if(total%2){ return findKth(nums1,nums2,(total+1)/2); } else{ return (findKth(nums1,nums2,total/2)+findKth(nums1,nums2,total/2+1))*0.5; } }};
0 0
- 排序查找算法实战---Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of two sorted arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- median-of-two-sorted-arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Median of Two Sorted Arrays
- Service优先级提高
- 最近的一点想法
- android Lollipop(5.0)--activity跳转动画
- [LeetCode]139.Word Break
- Html中CSS之去除li前面的小黑点,和ul、LI部分属性方法
- 排序查找算法实战---Median of Two Sorted Arrays
- Linux 下修改Tomcat使用的JVM内存大小
- 前端必读:浏览器内部工作原理
- ORA-01031: 权限不足
- Notepad++
- Linux网络编程——广播
- linux shell test manual
- 设计模式六大原则(1):单一职责原则
- Android之应用中执行Linux命令