leetcode #4: Median of Two Sorted Arrays

来源:互联网 发布:去人声软件 编辑:程序博客网 时间:2024/06/05 05:52

题目链接: Median of Two Sorted Arrays

这道题坑还是有点多的,刚看到的时候第一反应是:这不就是归并排序....还是图样啊。所以先这样提交了:


class Solution(object):    def findMedianSortedArrays(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: float        """        idx1 = 0        idx2 = 0        a = 0        b = 0        while idx1 + idx2 != (len(nums1) + len(nums2))//2 + 1:        print(idx1, idx2)        if idx1 == len(nums1) and idx2 < len(nums2):        a = b        b = nums2[idx2]        idx2+=1        elif idx2 == len(nums2) and idx1 < len(nums1):        a = b        b = nums1[idx1]        idx1+=1        elif idx1 == len(nums1) and idx2 == len(nums2):            break        else:        if nums1[idx1] <= nums2[idx2]:        a = b        b = nums1[idx1]        idx1+=1        else:        a = b        b = nums2[idx2]        idx2+=1        print '-------'        print a, b        if (len(nums1) + len(nums2)) % 2 == 0:         return (float)(a + b)/2        else:        return b

其实暴力算法也不是很好写的,会有很多坑爹的边界问题。


结果:

黑人文号.jpg

看了下别人的做法才恍然大悟..其实可以转换为找第k大的数,可以将时间复杂度从O(n)降到O(lgn):

class Solution(object):    def findMedianSortedArrays(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: float        """        n = len(nums1) + len(nums2)    if n % 2:    return self.find_kth(nums1, nums2, n//2 + 1)    else:    return float(self.find_kth(nums1, nums2, n//2) + self.find_kth(nums1, nums2, n//2 + 1)) / 2    def find_kth(self, nums1, nums2, k):        #print nums1, nums2, k        len1 = len(nums1)        len2 = len(nums2)    if len1 == 0:    return nums2[k - 1]    if len2 == 0:    return nums1[k - 1]    if k == 1:    return min(nums1[0], nums2[0])    idx = k//2    if idx > min(len1, len2):        idx = min(len1, len2)    #print idx    if nums1[idx - 1] <= nums2[idx - 1]:    return self.find_kth(nums1[idx:], nums2, k - idx)    else:    return self.find_kth(nums1, nums2[idx:], k - idx)


0 0
原创粉丝点击