双指针:归并两个有序数组
只是记录自己的刷题过程,答案参考过多种题解。
如有错误感谢指正!
参考:LeetCode 101: A LeetCode Grinding Guide (C++ Version) 作者:高畅 Chang Gao
A. 双指针思想
-
因为这两个数组已经排好序,我们可以把两个指针分别放在两个数组的末尾,即 nums1 的 m − 1 位和 nums2 的 n − 1 位。
-
两个指针对应的值进行比较,每次将较大的那个数字复制到 nums1 的后边,然后向前移动一位。 因为我们也要定位 nums1 的末尾,所以我们还需要第三个指针,以便复制。
-
注意,
nums1 的 m − 1 位
和nums1 的末尾
不是同一位置。
B. 具体实现
-
直接利用 m 和 n 当作两个数组的指针,再额外创立一个 pos 指针,起始位置为 m+n−1。每次向前移动 m 或 n 的时候,也要向前移动 pos。
-
这里需要注意,如果 nums1 的数字已经复制完,不要忘记把 nums2 的数字继续