这题是hard题,之前没有注意,先写一下最直观的算法。

代码实现

解法一

用两个指针遍历两个数组,遍历一半数之后,就可以找到中位数了。

  1. class Solution:
  2. def isEven(self,number):
  3. if number%2==0:
  4. return True
  5. return False
  6. def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
  7. m=len(nums1)
  8. n=len(nums2)
  9. if n==0:
  10. if self.isEven(m):
  11. return (nums1[m//2-1]+nums1[m//2])/2
  12. return nums1[m//2]
  13. if m==0:
  14. if self.isEven(n):
  15. return (nums2[n//2-1]+nums2[n//2])/2
  16. return nums2[n//2]
  17. t=(m+n)//2
  18. if self.isEven(n+m):
  19. index1,index2=0,0
  20. t_number1=0
  21. t_number2=0
  22. while index1<m or index2<n:
  23. if index1<m and (index2>=n or nums1[index1]<nums2[index2]):
  24. t_number1=t_number2
  25. t_number2=nums1[index1]
  26. index1=index1+1
  27. elif index2<n and (index1>=m or nums1[index1]>=nums2[index2]):
  28. t_number1=t_number2
  29. t_number2=nums2[index2]
  30. index2=index2+1
  31. if index1+index2==t+1:
  32. return (t_number1+t_number2)/2
  33. else:
  34. index1,index2=0,0
  35. t_number=0
  36. while index1<m or index2<n:
  37. if index1<m and (index2>=n or nums1[index1]<nums2[index2]):
  38. t_number=nums1[index1]
  39. index1=index1+1
  40. elif index2<n and (index1>=m or nums1[index1]>=nums2[index2]):
  41. t_number=nums2[index2]
  42. index2=index2+1
  43. if index1+index2==t+1:
  44. return t_number

其他的方法显得高端,水平暂时不够。
可以见:https://www.cnblogs.com/grandyang/p/4465932.html