Python学习-Leetcode刷题记2:寻找两个有序数组的中位数

Python学习-Leetcode刷题记2:寻找两个有序数组的中位数

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

示例1结果示例2结果
nums1[1,3]nums2[1,2]
nums2[2]nums2[3,4]
中位数2.0中位数2.5

解题思路(暴力方法,并不满足时间复杂度为 O(log(m + n))) )

  1. 将两个列表合并为一个列表;
  2. 将合并后的新列表进行升序排序;
  3. 获取新列表的长度;
  4. 判断新列表的长度是偶数还是奇数,如果是偶数则中位数为新列表中间两个数的平均数;如果是奇数则中位数为新列表中间的那一个数。

解题过程讲解

class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
        #合并两个列表,并使用sorted方法将列表中的元素进行升序排序
        nums = sorted(nums1 + nums2)
        #获取新列表的长度
        length = len(nums)
        #判断列表的长度是偶还是奇
        if length%2:
        	#当列表的长度是奇数时,则中位数直接获取列表中间的那一个数
            Median = (nums[length//2])
        else:
        	#当列表的长度是偶数时,则中位数为列表中中间两个数的平均数
            Median = ((nums[length//2]) + (nums[(length//2) - 1])) / 2
        #获取结果,返回中位数
        return Median

总结

总的来说,如果这一道题不考虑时间复杂度为 O(log(m + n)) 这一要求,解题方法是比较容易的,没有用到什么复杂的算法,解题思路也比较清晰。但是,如果考虑时间复杂度为 O(log(m + n)) ,这道题的难度就提升很多了,本人还在思考中,有答案后将补充到此,欢迎各位大神指点!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值