一天一道LeetCode

(一)题目

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 2]和[1 2] 返回值:1.5

(二)解题思路

时间复杂度要满足O(log(m+n)), 可以采用一个辅助容器来存储小值,等存到两个数组的一半的时候就停止,再根据奇偶来求中间值。

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        vector<int> temp;
        int len1=nums1.size();
        int len2= nums2.size();
        int idx = (len1+len2)/2+1;//需要存放idx个数
        int i =0,j=0;
        int size = 0;
        if(len1 ==0 && len2==0) return 0.0;
        while(size != idx) //当idx==size的时候退出
        {
            if(i == len1 && j<len2)//1遍历完了还没有找到
            {
                temp.push_back(nums2[j]);
                j++;
            }
            else if(i < len1 && j==len2)//2遍历完了还没有找到
            {
                temp.push_back(nums1[i]);
                i++;
            }
            else if(i < len1 && j<len2)//1和2都没有遍历完
            {
                if(nums1[i]<=nums2[j]){
                    temp.push_back(nums1[i]);
                    i++;
                }
                else
                {
                    temp.push_back(nums2[j]);
                    j++;
                }
            }
            size = temp.size();
        }
        if((len1+len2)%2 == 1) return (double)temp[idx-1];
        else return (double)(temp[idx-1]+temp[idx-2])/2;
    }
};

该算法遍历(m+n)/2+1次,所以时间复杂度为O(m+n)。

提示:Accepted!

和女票一起做的这题,一开始我用两个指针来求中间值,无奈情况太多考虑不周,代码量太大了,后来才转而用辅助vector。女票半个小时不到就做出来了,用STL的multiset几句代码就搞定的,multiset的insert自带排序,简直逆天!下面贴上她的代码。

#include<set>
class Solution {
public:
    double findMedianSortedArrays(int A[], int m, int B[], int n) {

        int mid = (m+n+1)/2-1, median1 = 0, median2 = 0;
        multiset<int> mergeArray;
        for(int i = 0; i < m; i++)
            mergeArray.insert(A[i]);
        for(int i = 0; i < n; i++)
            mergeArray.insert(B[i]);

        int i = 0;
        set<int>::iterator iter = mergeArray.begin();
        for(; i++ < mid &&iter != mergeArray.end(); ++iter); 

        median1 = *iter;
        iter++;
        median2 = *iter;

        if((m+n)%2)
            return median1;
        else
            return (median1+median2)/2.0;
    }
};

【一天一道LeetCode】#4 Median of Two Sorted Arrays的更多相关文章

  1. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays

    一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...

  2. LeetCode(3) || Median of Two Sorted Arrays

    LeetCode(3) || Median of Two Sorted Arrays 题记 之前做了3题,感觉难度一般,没想到突然来了这道比较难的,星期六花了一天的时间才做完,可见以前基础太差了. 题 ...

  3. LeetCode 4 Median of Two Sorted Arrays (两个数组的mid值)

    题目来源:https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 an ...

  4. Leetcode 4. Median of Two Sorted Arrays(二分)

    4. Median of Two Sorted Arrays 题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/ Descr ...

  5. LeetCode 4. Median of Two Sorted Arrays & 归并排序

    Median of Two Sorted Arrays 搜索时间复杂度的时候,看到归并排序比较适合这个题目.中位数直接取即可,所以重点是排序. 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个 ...

  6. 第三周 Leetcode 4. Median of Two Sorted Arrays (HARD)

    4. Median of Two Sorted Arrays 给定两个有序的整数序列.求中位数,要求复杂度为对数级别. 通常的思路,我们二分搜索中位数,对某个序列里的某个数 我们可以在对数时间内通过二 ...

  7. Leetcode 4. Median of Two Sorted Arrays(中位数+二分答案+递归)

    4. Median of Two Sorted Arrays Hard There are two sorted arrays nums1 and nums2 of size m and n resp ...

  8. LeetCode 004 Median of Two Sorted Arrays

    题目描述:Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. F ...

  9. leetcode 4. Median of Two Sorted Arrays

    https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 and num ...

  10. leetcode之 median of two sorted arrays

    这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetc ...

随机推荐

  1. intel-hadoop/HiBench流程分析----以贝叶斯算法为例

    1.HiBench算法简介 Hibench 包含9个典型的hadoop负载(micro benchmarks,hdfs benchmarks,web search bench marks,machin ...

  2. [CSDN_Markdown]使用LaTeX基本数学公式

    简介 以前我很头疼在博文里写公式,一直期盼CSDN的博文编辑器能支持LaTeX 公式输入,今天终于可以使用这个功能了!此文主要讨论如何在CSDN的Markdown编辑器中写 LaTeX 公式! 使用L ...

  3. Swift对象实例方法名混淆的解决

    在Xcode7.x中,比如有以下一个类: class Foo{ func test(v:Int,before:Int)->Int{ return v + 1 } } 我可以直接这么做: let ...

  4. Java异常处理-----抛出处理

    抛出处理 定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理. 功能内部不想处理,或者处理不了.就抛出使用throw new Exception("除数 ...

  5. [ExtJS5学习笔记]第三十四节 sencha extjs 5 grid表格之java后台导出excel

    继上次使用js前端导出excel之后,还有一个主要大家比较关注的是后台实现导出excel,因为本人开发使用的java所以这里使用apache的开源项目poi进行后台excel的导出. 本文目录 本文目 ...

  6. Android新建工程步骤(AndroidStudio)

    1.在 Android Studio 中,创建新项目: 如果您未打开项目,请在 Welcome to Android Studio 窗口中,点击 Start a new Android Studio ...

  7. XML之DOM解析模型

    <?xml version= "1.0" encoding = "UTF-8"> <articles> <article cate ...

  8. iOS中NSTimer的invalidate调用之后

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  9. iOS 10 推送全解析,注意事项

    本文旨在对 iOS 推送进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacode 使用 iOS ...

  10. Dynamics CRM 开启EmailRouter日志记录

    找到mailrouter的安装路径,在service文件夹下找到"Microsoft.Crm.Tools.EmailAgent.xml"这个文件,已管理员方式打开,找到loglev ...