Median of Two Sorted Arrays
题目: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的更多相关文章
- 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...
- [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 ...
- 2.Median of Two Sorted Arrays (两个排序数组的中位数)
要求:Median of Two Sorted Arrays (求两个排序数组的中位数) 分析:1. 两个数组含有的数字总数为偶数或奇数两种情况.2. 有数组可能为空. 解决方法: 1.排序法 时间复 ...
- 【转载】两个排序数组的中位数 / 第K大元素(Median of Two Sorted Arrays)
转自 http://blog.csdn.net/zxzxy1988/article/details/8587244 给定两个已经排序好的数组(可能为空),找到两者所有元素中第k大的元素.另外一种更加具 ...
- LeetCode 4 Median of Two Sorted Arrays (两个数组的mid值)
题目来源:https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 an ...
- No.004 Median of Two Sorted Arrays
4. Median of Two Sorted Arrays Total Accepted: 104147 Total Submissions: 539044 Difficulty: Hard The ...
- 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 ...
- LeetCode(3) || Median of Two Sorted Arrays
LeetCode(3) || Median of Two Sorted Arrays 题记 之前做了3题,感觉难度一般,没想到突然来了这道比较难的,星期六花了一天的时间才做完,可见以前基础太差了. 题 ...
- Kotlin实现LeetCode算法题之Median of Two Sorted Arrays
题目Median of Two Sorted Arrays(难度Hard) 方案1,数组合并&排序调用Java方法 import java.util.* class Solution { fu ...
- LeetCode--No.004 Median of Two Sorted Arrays
4. Median of Two Sorted Arrays Total Accepted: 104147 Total Submissions: 539044 Difficulty: Hard The ...
随机推荐
- jQuery使用load方法加载其他文档内容
A文档载入B文档的内容,并且通过JQ操作被引入到A文档中的元素 A文档 (index.html): <!DOCTYPE html> <html lang="en" ...
- Logistic Regression逻辑回归
参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f010 ...
- [IIS]IIS扫盲(四)
IIS简易安装 义哥门户网 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMT ...
- jQuery MiniUI开发系列之:HTML标签配置
全部使用Javascript写一个界面,是一件很困难的事. 1)要求有较高的Javascript编程能力. 2)会造成“代码树”问题.一级又一级子"children",需要&quo ...
- XMPP协议错误码
302 重定向 尽管HTTP规定中包含八种不同代码来表示重定向,Jabber只用了其中一个(用来代替所有的重定向错误).不过Jabber代码302是为以后的功能预留的,目前还没有用到 400 坏请求 ...
- restfull api
REST 表示状态传输.这是一个体系结构样式,可用于设计网络服务,可以被各种客户端消耗.核心思想是,不使用如CORBA,RPC或SOAP复杂的机制在机器之间进行连接,简单的 HTTP 用于使它们之间调 ...
- php源码之计算两个文件的相对路径
<?php //计算出两个文件的相对路径即path2相对于$path1的相对路径 // http://www.manongjc.com/article/1342.html function ge ...
- centos 6.3 安装 svn
1. 按照http://ostechnix.wordpress.com/2013/04/30/install-subversion-server-in-centos-6-4-rhel-6-4-scie ...
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下: public class Tree ...
- 【练习】flushback基于时间的闪回查询
1.创建table t1 :: SCOTT@ORA11GR2>create table t1 as select * from scott.emp; Table created. :: SCOT ...