There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
class Solution(object): def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ while 1: if len(nums1)+len(nums2) <= 2: if len(nums1) == 0: res = float(nums2[0]+nums2[-1])/2 elif len(nums2) == 0: res = float(nums1[0]+nums1[-1])/2 else: res = float(nums1[0]+nums2[0])/2 break; if len(nums1) == 0: if len(nums2) > 2: del nums2[0] del nums2[-1] elif len(nums2) > 1: res = float(nums2[0]+nums2[-1])/2 break else: res = nums2[0] break; elif len(nums2) == 0: if len(nums1) > 2: del nums1[0] del nums1[-1] elif len(nums1) > 1: res = float(nums1[0]+nums1[-1])/2 break; else: res = nums1[0] break; else: if nums1[0] < nums2[0]: del nums1[0] elif nums1[0] > nums2[0]: del nums2[0] else: if len(nums1) > len(nums2): del nums1[0] else: del nums2[0] if len(nums1) == 0: del nums2[-1] elif len(nums2) == 0: del nums1[-1] else: if nums1[-1] > nums2[-1]: del nums1[-1] elif nums1[-1] < nums2[-1]: del nums2[-1] else: if len(nums1) > len(nums2): del nums1[-1] else: del nums2[-1] return float(res)
思想是每次循环删除两个list中一个最小的和一个最大的,最后剩下的一个数或者两个数的均值就是要返回的值。
但是要判断的情况太多了,代码写的又臭又长,看了一下评论区也没有特别赏心悦目的,就这样吧。
感觉下一题没脸发出来了……
时间: 2024-10-19 15:53:46