一天一道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. Spark Scheduler模块源码分析之DAGScheduler

    本文主要结合Spark-1.6.0的源码,对Spark中任务调度模块的执行过程进行分析.Spark Application在遇到Action操作时才会真正的提交任务并进行计算.这时Spark会根据Ac ...

  2. Android Studio中Git的配置及协同开发

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51595096 本文出自:[openXu的博客] 目录: 一 Android Stutio配置 ...

  3. UIKit视图动画的微扩展

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 好久没写blog了,还不快快写来- ;] 我们知道在UIKit ...

  4. Android开发之Intent.Action 各种Action的常见作用

    1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始.比较常用. Input:nothing Outpu ...

  5. CUSTOM.PLL的使用

    在开发中对系统标准form的修改一般不建议修改系统原有FORM,对所需要修改的内容一般写在CUSTOM.PLL里即可,应为每个form运行的时候都会调用CUSTOM.PLL具体概念性东西可参考网上资料 ...

  6. Java中导出到Excel实现_aspose.cells

    参考http://183615215-qq-com.iteye.com/blog/1858208 包下载:http://pan.baidu.com/s/1o6ju0ZK,将lib的jar包导入到工程中 ...

  7. UNIX网络编程——Socket通信原理和实践

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  8. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  9. blob2clob/clob2blob研究

    一.两种方法实现  blob到clob的转换 CREATE OR REPLACE FUNCTION blob2clob(v_blob_in IN BLOB) RETURN CLOB IS v_fi ...

  10. 03 SeekBar 音频播放拖拽进度条

    八,  SeekBar  音频播放拖拽进度条       >                 android:progress="40"   第一进度         and ...