[LeetCode_PY] Median of Two Sorted Arrays

题目:
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)).

思路:

方法一:
先做最笨的方法,两个列表合并,排序,找到中间的那个。
python2.7 稍微处理一下整除的问题。

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """

        nums3 = nums1 + nums2
        nums3.sort()
        size = len(nums3)
        if size % 2 :
            return nums3[ size /2 ]
        else:
            return ( nums3[ size /2 - 1 ] +  nums3[ size /2 ] ) / 2.0

居然accept,复杂度显然是不满足,这里面复杂度是(m+n)log(m+n)

方法二:
k = (m + n )/ 2 已知两个有序列表,求第K大的数。
找一找第K大的数,应该用什么方法,堆排序什么的,或者二分查找看看能不能用上。最后找到了一个,折半排除的方法

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
def findKth(a, a_start, a_len, b, b_start, b_len, k):
    """
    :type a: List[int]
    :a_start: a 开始的下标
    """
    if a_len >  b_len:
        return findKth(b, b_start, b_len, a, a_start, a_len, k)
    if a_len == 0:
        return b[b_start + k - 1 ]
    if k == 1:
        return min(a[a_start], b[b_start])
    pa = min( k / 2, a_len )
    pb = k - pa
    if a[a_start + pa - 1] < b[b_start + pb - 1]:
        return findKth(a, a_start + pa , a_len - pa, b, b_start, b_len, k - pa)
    elif a[a_start + pa - 1] > b[b_start + pb - 1]:
        return findKth(a, a_start, a_len, b, b_start + pb, b_len - pb, k - pb)
    else:
        return a[a_start + pa - 1]

class Solution():

    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """

        sum_len = len(nums1) + len(nums2)

        if sum_len % 2 :
            return findKth(nums1, 0, len(nums1), nums2, 0, len(nums2), sum_len / 2 + 1)
        else:
            return (findKth(nums1, 0, len(nums1),  nums2, 0, len(nums2), sum_len / 2 ) + findKth(nums1, 0, len(nums1),  nums2, 0, len(nums2), sum_len / 2 + 1)) / 2.0

posted @ 2016-03-14 17:22  程序员杰诺斯  阅读(94)  评论(0编辑  收藏  举报