leetcode 4. Median of Two Sorted Arrays

来源:互联网 发布:重庆时时彩网络关注 编辑:程序博客网 时间:2024/04/30 04:08
class Solution {public:    int findNum(vector<int>&nums1,vector<int>&nums2,int t){        int l1 = 0, h1 = nums1[nums1.size()-1];;        if(nums2.size() > 0) h1 = max(h1,nums2[nums2.size()-1]);        int n = nums1.size(), m = nums2.size();        while( l1 <= h1 ){            int small = 0;            int l2 = 0, h2 = n-1;            int mid1 = (l1+h1)/2;            while(l2 <= h2){                int mid = (l2+h2)/2;                if(nums1[mid]>mid1)h2=mid-1;                else l2=mid+1;            }            small+=l2;            if(small >= t){                h1 = mid1-1;                continue;            }            l2 = 0,h2=m-1;            while(l2 <= h2){                int mid = (l2+h2)/2;                if(nums2[mid]>mid1)h2=mid-1;                else l2 =mid+1;            }            small+=l2;            if(small >= t) h1 = mid1-1;            else l1 = mid1+1;        }       // cout<<l1<<" "<<t<<endl;        return l1;    }    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {        if(nums1.size() == 0) swap(nums1,nums2);        int n = nums1.size();        int m = nums2.size();        int t = (n+m+1)/2;        int ans = findNum(nums1,nums2,t);        if(t*2==n+m){            ans += findNum(nums1,nums2,t+1);        }        else ans*=2;        return 1.0*ans/2;    }};
思路:二分第t个数是多大,那么分奇偶求出与中位数有关的数字就行。
0 0
原创粉丝点击