原题链接
题目描述:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
解题思路:
1. 遍历中位数+1次,在每次遍历的时候,判断当前值是多少。
2. 同时记录前一个数字,因为根据题意,如果总长度是2的倍数,那你就要取(mid - 1 + mid) / 2
3. 当for循环结束后,如果总长度为奇数,那么就是最后这个数,总长度为偶数就前一个数+当前数除2就是了
golang
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
len1 := len(nums1)
len2 := len(nums2)
mid := (len1 + len2) / 2
i1 := 0
i2 := 0
i := 0
pre := 0
sum := 0
for i <= mid {
pre = sum
if i1 < len1 && i2 < len2 {
// 两个数组都在范围内,比较两个数大小
if nums1[i1] < nums2[i2] {
sum = nums1[i1]
i1 += 1
} else {
sum = nums2[i2]
i2 += 1
}
} else if i1 < len1 && i2 >= len2 {
// num2遍历完了,nums1还没有遍历完
sum = nums1[i1]
i1 += 1
} else if i2 < len2 && i1 >= len1 {
// num1遍历完了,nums2还没有遍历完
sum = nums2[i2]
i2 += 1
}
i += 1
}
if (len1 + len2) % 2 == 0 {
return float64(pre + sum) / float64(2)
}
return float64(sum)
}
|