题目:https://leetcode.com/problems/median-of-two-sorted-arrays/

算法分析

这道题的目的,是为了从两个有序列中找到合并序列之后的中位数,即两个序列中,数值的大小处在(len(nums1)+len(nums2))/2位置的数。所以,这道题可以转换成,求解两个序列中,数值的大小处在第k位的数。这里用Nk表示要求的第k位数。

首先,我们分析两种简单的情况:

即两个序列中有一个序列为空,即len(nums1)==0 or len(nums2)==0,这时的返回值为非空序列的第k位数,即nums1[k-1]或者nums2[k-1]

对于比较一般的情况,我们需要先计算两个序列的元素总个数,total=len(nums1)+len(nums2),然后,进行奇偶性分析:

1. 如果total为奇数,则Nmedian=Ntotal+12

2. 如果total为偶数,则Nmedian=(Ntotal2+Ntotal2+1)/2

下面,就要对第k位数进行查找,这里的查找思路是利用二分查找:

每次查找,就需要对两个序列中的其中一个,去除k/2个数,所以,我们只需要比较Nums1k/2和Nums2k/2的大小,如果前者大,就将Nums2中的前k/2个数去除,即第k位的数,一定不在Nums2的前k/2中。将Nums2的前k/2个数去除之后,问题就变成了从余下的元素中,寻找第k-k/2位数。

上述的查找思路,还需要考虑当Nums2的元素个数小于k/2时,就只能去除len(nums2)个数。即问题就变成了,在Nums1中寻找第k-len(nums2)位置的数。

在比较Nums1k/2和Nums2k/2的大小时,如果两者相等,则第k位置的数,就是Nums1k/2或Nums2k/2

代码实现

class Solution(object):
def findKth(self, a, m, b, n, k):
if m > n:
return self.findKth(b,n,a,m,k)
if m == 0:
return b[k-1]
if k == 1:
return min(a[0],b[0])
pa = min(k/2, m)
pb = k - pa
if a[pa-1] < b[pb-1]:
return self.findKth(a[pa:], m-pa, b, n, k-pa)
elif a[pa-1] > b[pb-1]:
return self.findKth(a, m, b[pb:], n-pb, k-pb)
else:
return a[pa-1] def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
m = len(nums1)
n = len(nums2)
total = m + n
if total & 1 == 1:
return self.findKth(nums1, m, nums2, n, total/2 + 1)
else:
return (self.findKth(nums1, m, nums2, n, total/2) + self.findKth(nums1, m, nums2, n, total/2+1))/2.0

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. [LintCode] Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...

  3. 2.Median of Two Sorted Arrays (两个排序数组的中位数)

    要求:Median of Two Sorted Arrays (求两个排序数组的中位数) 分析:1. 两个数组含有的数字总数为偶数或奇数两种情况.2. 有数组可能为空. 解决方法: 1.排序法 时间复 ...

  4. 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)

    转自 http://blog.csdn.net/zxzxy1988/article/details/8587244 给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素.另外一种更加具 ...

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

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

  6. No.004 Median of Two Sorted Arrays

    4. Median of Two Sorted Arrays Total Accepted: 104147 Total Submissions: 539044 Difficulty: Hard The ...

  7. leetcode第四题:Median of Two Sorted Arrays (java)

    Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respectively. Find t ...

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

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

  9. Kotlin实现LeetCode算法题之Median of Two Sorted Arrays

    题目Median of Two Sorted Arrays(难度Hard) 方案1,数组合并&排序调用Java方法 import java.util.* class Solution { fu ...

  10. LeetCode--No.004 Median of Two Sorted Arrays

    4. Median of Two Sorted Arrays Total Accepted: 104147 Total Submissions: 539044 Difficulty: Hard The ...

随机推荐

  1. 【转】CSS深入理解流体特性和BFC特性下多栏自适应布局

    这篇文章发布于 2015年02月12日,星期四,23:36,归类于 css相关. 阅读 30873 次, 今日 63 次 by zhangxinxu from http://www.zhangxinx ...

  2. c#获取枚举

    在实际开发项目中,我们定义了一个枚举,往往我们需要在下拉框或其它地方展示枚举.为了加深印象,也为了帮到有需要的人,我写了一个DEMO. 第一步,我们定义一个枚举: /// <summary> ...

  3. 就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers

    就是这么简单(续)!使用 RestAssuredMockMvc 测试 Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/43 ...

  4. Hihocoder 1035 [树形dp]

    /* 题意: 不要低头,不要放弃,不要气馁,不要慌张. PS:人生第一道自己独立做出来的树形dp... 给一棵树,标号1到n,每条边有两个权值,步行时间和驾车时间.车在1号点. 给m个必须访问的关键点 ...

  5. [DFNews] What's coming in EnCase 7.08?

    论版本变化速度,AD绝对首屈一指,从FTK 4到现在的FTK 5也不过两年多时间,EnCase近期(初步预计8月初)将推出V7的新版本7.08,下面是一些新功能: Evidence Processor ...

  6. (转)winform Form 淡入淡出效果

    原文地址:http://blog.csdn.net/a237428367/article/details/5933565 using System.Runtime.InteropServices; p ...

  7. 15. Linked List Cycle && Linked List Cycle II

    Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up: Can you solve i ...

  8. JAVA设计模式之解释器模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述解释器(Interpreter)模式的: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个 ...

  9. 如何在博客中插入jsfiddle的代码

    1.进入官网:https://jsfiddle.net/ 可以看到如下界面,顶端的控制按钮包括:保存,运行,代码格式化等: 2.将html.css.js分别写在指定的位置当中,最后一个框result是 ...

  10. JavaScript笔记:数据类型

    javascript中有5种基本数据类型:Undefined,Null,Boolean,Number和String,还有一种复杂的数据类型--Object.javascript不支持任何创建自定义类型 ...