给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
- 思路1:合并数组,利用两个数组是有序合并数组,然后获取中位数
private fun getMiddleNum(nums1: IntArray, nums2: IntArray): Double {
val resultArray = mutableListOf<Int>()
var n1 = 0
var n2 = 0
// 合并数组
while (n1 < nums1.size && n2 < nums2.size) {
when {
nums1[n1] < nums2[n2] -> {
resultArray.add(nums1[n1++])
}
nums1[n1] > nums2[n2] -> {
resultArray.add(nums2[n2++])
}
else -> {
resultArray.add(nums1[n1++])
resultArray.add(nums2[n2++])
}
}
}
while (n1 < nums1.size) {
resultArray.add(nums1[n1++])
}
while (n2 < nums2.size) {
resultArray.add(nums2[n2++])
}
// 返回中位数
return when {
resultArray.size == 0 -> {
0.0
}
resultArray.size % 2 == 0 -> {
val i = resultArray.size / 2
(resultArray[i] + resultArray[i - 1]) / 2.toDouble()
}
else -> {
val i = resultArray.size / 2
resultArray[i].toDouble()
}
}
}
- 思路2:知道两个集合的总长度,根据角标获取应该获取对应数组的位置!
…