码迷,mamicode.com
首页 > 其他好文 > 详细

4. Median of Two Sorted Arrays

时间:2016-03-26 16:59:46      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

文章目录如下

(1)自己的思路

(2)自己的代码

(3)别人的思路

(4)别人的代码

(5)对比自己的不足之处

题目如下:

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)).

(1)自己的思路

a.因为nums1与nums2都是有序的,所以这里只需要按顺序将他们合并成一个有序的nums3即可

b.根据中位数的定义,即取中间位置的数即可,当数组个数为奇数时,只需要取出len/2位置的元素位置。如果数组个数为偶数,只需要取出(len/2)-1与len/2位置的位置元素的和的均值即可

c.该题最主要的是选择合并两个数组的策略,在自己的做法中,所用的时间应该为m+n

 

(2)自己的代码

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {        
        int i = 0, j = 0;
        int lens1 = nums1.size(), lens2 = nums2.size();
        vector<int> nums3;

        while (i<lens1 || j<lens2)
        {
            //这里要注意for循环中条件判断的顺序
            for (;i<lens1&&(j == lens2 || nums1[i]<=nums2[j]); i++) 
                nums3.push_back(nums1[i]);

            for (;(j<lens2)&&(i == lens1 || nums1[i] > nums2[j]); j++) 
                nums3.push_back(nums2[j]);
                
        }
        //求中位数位置
        int midlens3 = nums3.size() / 2;

        if (nums3.size() == 0) 
            return 0;
        else if (nums3.size() == 1) 
            return (double)nums3[0];
        else if (nums3.size() % 2 == 0) 
            return (double(nums3[midlens3] + nums3[midlens3 - 1]) / 2);
        else return double(nums3[midlens3]);
    }
};

(3)别人的思路

 

暂时还没有找到合适的代码,请大家多多见谅……

(不过我觉得这次我自己写的就挺好的,哈哈哈哈哈)

 

4. Median of Two Sorted Arrays

标签:

原文地址:http://www.cnblogs.com/magicy/p/5323016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!