4. 寻找两个正序数组的中位数

给定两个大小分别为 mn 的正序(从小到大)数组 nums1nums2。请你找出并返回这两个正序数组的 中位数

示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

  1. func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
  2. m,n := len(nums1),len(nums2)
  3. if m>n{
  4. return findMedianSortedArrays(nums2,nums1)
  5. }
  6. iMin ,iMax,laftLen := 0,m,(n+m+1)/2
  7. for iMin <= iMax{
  8. i := iMin + (iMax-iMin)/2
  9. j := laftLen - i
  10. if i > iMin && nums1[i-1] > nums2[j]{
  11. iMax = i - 1
  12. } else if i < iMax && nums2[j-1] > nums1[i]{
  13. iMin = i + 1
  14. } else{
  15. leftMax := 0
  16. if i == 0{
  17. leftMax = nums2[j-1]
  18. }else if j == 0{
  19. leftMax = nums1[i-1]
  20. }else{
  21. leftMax = max(nums1[i-1],nums2[j-1])
  22. }
  23. if (m+n)%2 != 0{
  24. return float64(leftMax)
  25. }
  26. rightMin := 0
  27. if i == m {
  28. rightMin = nums2[j]
  29. }else if j == n{
  30. rightMin = nums1[i]
  31. }else{
  32. rightMin = min(nums1[i],nums2[j])
  33. }
  34. return float64(leftMax+rightMin)/2.0
  35. }
  36. }
  37. return 0.0
  38. }
  39. func max(a,b int)int{
  40. if a > b{
  41. return a
  42. }else{
  43. return b
  44. }
  45. }
  46. func min(a,b int )int{
  47. if a > b{
  48. return b
  49. }else{
  50. return a
  51. }
  52. }