题目: 给定两个有序数组A和B,把B合并到A里,保持结构有序.假设A有足够的空间容纳B的元素.初始时,A和B的元素各有m个和n个.
分析: 这题可以这样来,从A和B的末尾向前移动,进行比较,将比较大的值放到A中下标为len(A)+len(B)-1的地方(假设两个序列是从小到大排列的),之后比较大的值的序列往前一个,然后再比较,放到len(A)+len(B)-2的地方,重复前面的操作,直到两个序列合并完成.
代码实现:
package main
import "fmt"
func mergeTwoSortedArrays(a, b []int, m, n int) {
l := m + n - 1
i, j := m - 1, n - 1
for ;i >= 0 && j >= 0; {
if a[i] >= b[j] {
a[l] = a[i]
i--
} else {
a[l] = b[j]
j--
}
l--
}
// 对剩下的B进行合并
for j >= 0 {
a[l] = b[j]
j--
l--
}
}
func main() {
a, b := make([]int, 10, 10), make([]int, 5)
a = []int{1,2,3,4,5, 0, 0, 0, 0, 0}
b = []int{1,2,3,4,8}
mergeTwoSortedArrays(a, b, 5, 5)
fmt.Println(a)
}