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))) )
- 将两个列表合并为一个列表;
- 将合并后的新列表进行升序排序;
- 获取新列表的长度;
- 判断新列表的长度是偶数还是奇数,如果是偶数则中位数为新列表中间两个数的平均数;如果是奇数则中位数为新列表中间的那一个数。
解题过程讲解
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)) ,这道题的难度就提升很多了,本人还在思考中,有答案后将补充到此,欢迎各位大神指点!