题目: 两个有序数组A和B,分别拥有m和n的长度,求其合并后的值.
代码实现:
func findKthSortedArrays(A, B []int) float64 {
i, j, ia, ib, la, lb := 0, 0, -1, -1,len(A), len(B)
k := (la + lb) / 2
flag := false // false表示第k个值在A上,true表示第k个值在B上
for i < la && j < lb && ia + ib + 2 < k {
if A[i] <= B[j] {
ia = i
i++
flag = false
} else {
ib = j
j++
flag = true
}
}
// A中进行探究
for i < la && ia + ib + 2 < k {
i++
flag = false
}
// B中进行探究
for j < lb && ia + ib + 2 < k {
j++
flag = true
}
s := 0
if ia < 0 && ib < 0 {
return 0
} else if flag == false && ia >= 0 {
s = A[ia]
} else if flag == true && ib >= 0 {
s = B[ib]
}
// 奇数情况
if (la + lb) % 2 == 1 {
return float64(s)
}
// 偶数情况
if i < la && j < lb && ia + ib + 2 < k + 1 {
if A[i] <= B[j] {
s += A[i]
} else {
s += B[j]
}
} else if i < la && ia + ib + 2 < k + 1 {
// A中进行探究
s += A[i]
} else if j < lb && ia + ib + 2 < k + 1 {
// B中进行探究
s += B[j]
}
return float64(s) / 2
}