码迷,mamicode.com
首页 > 编程语言 > 详细

4. 寻找两个有序数组的中位数

时间:2019-12-31 18:47:37      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:要求   pre   turn   int   sorted   arrays   xtend   span   media   

链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays

给定两个大小为 m 和 n 的有序数组?nums1 和?nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为?O(log(m + n))。

你可以假设?nums1?和?nums2?不会同时为空。

先说自己的解法

写了一个\(O(log(m)^2)\)的算法,时间有点多,击败了14%的python3

基本思路就是把两个数组重新排序,但是比较的时候比较头部的元素,然后二分查找比较小的那一只数组里所有小于另一个头的元素。其实有点浪费了。题目只要找到中位数,中位数就是比一半大,比一半小。大或者小就不用排序。
具体思路看官方题解。

class Solution:
    def findSmallerIndex(self,nums,target): # 先找到第一个大于target 的坐标,减去一就是不大于target 的下标最大值
        head_index = 0
        tail = len(nums)
        tail_index = tail
        while head_index<=tail_index:
            mid_index = (head_index+tail_index)//2
            mid = nums[mid_index]
            if mid<=target and (mid_index+1>=tail or nums[mid_index+1]>target):
                return mid_index
            elif mid>target:
                tail_index = mid_index - 1
            elif mid<=target:
                head_index = mid_index + 1 
        
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        nums_all = []
        lens_all = len(nums1)+len(nums2)
        while len(nums1) or len(nums2):
            if len(nums1)==0:
                nums_all.extend(nums2)
            elif len(nums2)==0:
                nums_all.extend(nums1)
            elif nums1[0] <= nums2[0]:
                index = self.findSmallerIndex(nums1,nums2[0])
                nums_all.extend(nums1[:index+1])
                nums1 = nums1[index+1:]
            elif nums1[0] > nums2[0]:
                index = self.findSmallerIndex(nums2,nums1[0])
                nums_all.extend(nums2[:index+1])
                nums2 = nums2[index+1:]
            if len(nums_all)>=lens_all//2+1:
                break;
        return (nums_all[lens_all//2]+nums_all[(lens_all-1)//2])/2

4. 寻找两个有序数组的中位数

标签:要求   pre   turn   int   sorted   arrays   xtend   span   media   

原文地址:https://www.cnblogs.com/Lzqayx/p/12126292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!