Leetcode(4)寻找两个有序数组的中位数
[题目表述]:
给定两个大小为 m 和 n 的有序数组 nums1 和* nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1* 和 nums2 不会同时为空。
第一种方法: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
学习
- 对于已经排列好的数组,使用归并排序合并两个数组再找很好