NOTE

合并两个有序的数组

将两个有序整数数组合并为一个有序数组。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

给出两个有序的整数数组 和 ,请将数组 合并到数组 中,变成一个有序的数组 注意: 可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为 和

2. 思路

  1. 思路一

3. 实现

3.1. 从前往后

//时间:O(N)
//空间:O(N)
func merge(A []int, m int, B []int, n int) {
	res := make([]int, 0)

	i := 0
	j := 0
	for i < m && j < n {
		if A[i] < B[j] {
			res = append(res, A[i])
			i++
		} else {
			res = append(res, B[j])
			j++
		}
	}

	for i < m {
		res = append(res, A[i])
		i++
	}

	for j < n {
		res = append(res, B[j])
		j++
	}

	for i := 0; i < len(res); i++ {
		A[i] = res[i]
	}
}

3.2. 从后往前

//时间:O(N)
//空间:O(1)
func merge2(A []int, m int, B []int, n int) {
	i, j, k := m-1, n-1, m+n-1
	for i >= 0 && j >= 0 {
		if A[i] > B[j] {
			A[k] = A[i]
			i--
		} else {
			A[k] = B[j]
			j--
		}
		k--
	}
	for i >= 0 {
		A[k] = A[i]
		i--
		k--
	}
	for j >= 0 {
		A[k] = B[j]
		j--
		k--
	}
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看