Median of Two Sorted Arrays - LeetCode 4

来源:互联网 发布:使用u盘安装linux系统 编辑:程序博客网 时间:2024/05/20 21:45
题目描述:
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)).
Tags: Divide and Conquer Array Binary Search

分析:
首先,中位数的定义是位于中间位置的元素,如果是偶数个元素,那么中位数就是中间两个元素的平均值。

看到时间复杂度要求,用归并就可以了。先归并排序,然后直接定位中间的元素,或中间两个元素,求出平均值即可。
当然,归并之前得判断是否两个数组都非空,若其中一个为空就不用归并了。

以下是实现代码:

/**////////////////////////////44ms//*/class Solution {public:    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {        double mid = 0.0;        int m = nums1.size();        int n = nums2.size();        int len = m + n;        if(len == 0)            return mid;        if(n == 0 && m > 0){  //nums2为空,直接在nums1中找中位数            if(m == 1)                mid = (double)nums1[0];            else if(m %2 == 0)                mid = (nums1[m/2] + nums1[m/2 -1])/2.0;            else                mid = (double)nums1[m/2];            return mid;        }        if(m == 0 && n > 0){  //nums1为空,直接在nums2中找中位数            if(n == 1)                mid = (double)nums2[0];            else if(n %2 == 0)                mid = (nums2[n/2] + nums2[n/2 -1])/2.0;            else                  mid = (double)nums2[n/2];            return mid;        }                vector<int> vec;                int i = 0,j = 0;                while(i < m && j < n){ //归并            if(nums1[i] <= nums2[j]){                vec.push_back(nums1[i]);                i++;            }            else{                vec.push_back(nums2[j]);                j++;            }        }        while(i < m){            vec.push_back(nums1[i]);            i++;        }        while(j < n){            vec.push_back(nums2[j]);            j++;        }        //在归并后的数组中找中位数        if(len % 2){             mid = (double)vec[len/2];        }        else{            mid = (vec[len/2] + vec[len/2 -1])/2.0;        }        return mid;    }};


0 0
原创粉丝点击