Leetcode(4)寻找两个有序数组的中位数

#Leetcode(4)寻找两个有序数组的中位数
##[题目表述]:
给定两个大小为 m 和 n 的有序数组 nums1 和* nums2*。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1nums2 不会同时为空。

##第一种方法:list拼接排列取中位数
执行用时:116 ms ; 内存消耗:11.8MB 效果:还行

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        nums1.extend(nums2)
        sort_nums1=sorted(nums1)
        number=len(sort_nums1)
        if number%2==1 :
            average_nums=sort_nums1[number/2]
        else: average_nums=float((sort_nums1[number/2]+sort_nums1[number/2-1]))/2
        return average_nums

###学习

  • 整数/2在leetcode上 取整有点迷

  • 分奇偶情况

##第二种方法:归并排序
执行用时:124 ms; 内存消耗:11.8MB

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        number=len(nums1)+len(nums2)
        end=number/2+1
        p1,p2=0,0
        res=[]
        while p1 < len(nums1) or p2 < len(nums2):
            if p1 >= len(nums1):
                res.append(nums2[p2])
                p2 += 1
            elif p2 >= len(nums2):
                res.append(nums1[p1])
                p1 += 1
            else:
                num1, num2 = nums1[p1], nums2[p2]
                if num1 <= num2:
                    res.append(num1)
                    p1 += 1
                else:
                    res.append(num2)
                    p2 += 1
            if len(res) == end:
                if number%2==1 :
                    mid=res[-1]
                else:
                    mid=(res[-1]+res[-2])*1.0/2
                return mid

###学习

  • 对于已经排列好的数组,使用归并排序合并两个数组再找很好
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值