本文共 1217 字,大约阅读时间需要 4 分钟。
目录
给定两个大小为m和n的正序(从小到大)数组nums1和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度 。你可以假设nums1和nums2不会同时为空。
输入/输出描述
给定数组1 | [1, 2] |
给定数组2 | [3, 4] |
输出 | 2.5 |
解释 | 因为两个数组合并后按从小到大排序后的结果是[1, 2, 3, 4],则其中位数为 (2 + 3)/ 2 = 2.5 |
将两个数组合并后按照从小到大的序列排序,按照中位数的计算规则求出中位数的值。
中位数计算规则:
1、如果数列长度是奇数,则中位数对应的下标为 (length / 2) + 1
2、如果数列长度是偶数,则中位数对应下标为 length / 2的数字和 (length / 2) + 1 两数的平均值。
class Solution: def findMedianSortedArrays(self, nums1: list, nums2: list) -> float: nums1.extend(nums2) nums1.sort() length = len(nums1) if length % 2 == 0: return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0 else: return nums1[int((length+1)/2 - 1)]
# LeetCode定义解决方案类class Solution: def findMedianSortedArrays(self, nums1: list, nums2: list) -> float: # 将两个列表合并后按照从大到小的顺序排序 nums1.extend(nums2) nums1.sort() # 判断合并后列表的长度是奇数还是偶数,然后根据中位数计算规则计算出中位数 length = len(nums1) if length % 2 == 0: return (nums1[int(length/2 - 1)] + nums1[int(length/2)]) / 2.0 else: return nums1[int((length+1)/2 - 1)]# 自测用例if __name__ == '__main__': s = Solution() result = s.findMedianSortedArrays([1, 2], [3]) print(result)
转载地址:http://odsoi.baihongyu.com/