LeetCode 4 Median of Two Sorted Arrays

public class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {if((nums1.length+nums2.length)%2==1){return findKth(nums1,nums2,(nums1.length+nums2.length+1)/2);}else{return (1.0*findKth(nums1,nums2,(nums1.length+nums2.length+1)/2)+findKth(nums1,nums2,(nums1.length+nums2.length+1)/2+1))/2;}}public int findKth(int[] a,int[] b,int k){int len1=a.length,len2=b.length;if(len1==0)return b[k-1];if(len2==0)return a[k-1];if(k==1)return min(a[0],b[0]);int mid1=min(k/2,len1),mid2=min(k/2,len2);if(a[mid1-1] < b[mid2-1]){int[] c = new int[len1-mid1];for(int i=0;i<c.length;i++)c[i]=a[i+mid1];return findKth(c,b,k-mid1);}else{int[] c = new int[len2-mid2];for(int i=0;i<c.length;i++)c[i]=b[i+mid2];return findKth(a,c,k-mid2);}}public int min(int a,int b){return a>b?b:a;}}C语言源代码:int min(int a,int b){return a>b?b:a;}int findKth(int *a,int len1,int* b,int len2,int k){int mid1,mid2;if(len1==0)return b[k-1];if(len2==0)return a[k-1];if(k==1){return a[0]<b[0]?a[0]:b[0];}mid1 = min(k/2,len1);mid2 = min(k/2,len2);if(a[mid1-1]<b[mid2-1]){findKth(a+mid1,len1-mid1,b,len2,k-mid1);}else{findKth(a,len1,b+mid2,len2-mid2,k-mid2);}}double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int k=nums1Size+nums2Size;if(k%2==1){return findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size+1)/2);}else{return (findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size+1)/2) + findKth(nums1,nums1Size,nums2,nums2Size,(nums1Size+nums2Size+1)/2+1)*1.0)/2;}}C++源代码:class Solution {public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int size1=nums1.size(),size2=nums2.size();if((size1+size2)%2){return findKth(nums1,nums2,(size1+size2+1)/2);}else{return (1.0*findKth(nums1,nums2,(size1+size2+1)/2)+findKth(nums1,nums2,(size1+size2+1)/2+1))/2;}}private:int findKth(vector<int> a,vector<int> b,int k){int len1=a.size();int len2=b.size();if(len1==0)return b[k-1];if(len2==0)return a[k-1];if(k==1)return min(a[0],b[0]);int mid1 = min(k/2,len1);int mid2 = min(k/2,len2);if(a[mid1-1] < b[mid2-1]){a.erase(a.begin(),a.begin()+mid1);return findKth(a,b,k-mid1);}else{b.erase(b.begin(),b.begin()+mid2);return findKth(a,b,k-mid2);}}int min(int a,int b){return a>b?b:a;}};Python源代码:

,心有多大,舞台就有多大

LeetCode 4 Median of Two Sorted Arrays

相关文章:

你感兴趣的文章:

标签云: