视频字幕
合并两个数组是力扣中的经典算法问题。最常见的是合并两个有序数组,比如力扣第88题。给定两个有序数组nums1和nums2,我们需要将nums2合并到nums1中,使得合并后的数组仍然保持有序。
解决这个问题的关键是使用双指针算法。我们从两个数组的末尾开始比较,这样可以避免覆盖还未处理的元素。设置三个指针:i指向nums1的有效元素末尾,j指向nums2的末尾,k指向nums1的总长度末尾。
现在让我们看看算法的具体执行过程。首先比较3和6,6更大,所以将6放入位置5。然后比较3和5,5更大,放入位置4。接着比较3和2,3更大,放入位置3。继续比较2和2,相等时我们选择nums2的元素,最后完成合并。
这是完整的Python代码实现。我们使用三个指针i、j、k分别指向nums1的有效元素末尾、nums2的末尾和nums1的总长度末尾。通过while循环比较两个数组的元素,将较大的元素放入正确位置。最后处理nums2中可能剩余的元素。算法的时间复杂度是O(m+n),空间复杂度是O(1)。
总结一下合并两个有序数组的关键点:使用双指针从数组末尾开始比较,可以避免元素覆盖问题。算法的时间复杂度是O(m+n),空间复杂度是O(1),这是一个高效的原地合并算法,也是力扣第88题的标准解法。