题意:
解题思路:
思路:O(m+n)1. 设置指针 i 和 j 分别指向 nums1 和 nums2 的数字尾部,从尾部值开始比较遍历;2. 同时设置指针count指向nums1末尾,每次比较大小后进行填充;3. 循环以上步骤直到i = 0 或 j = 0;4. 当 i < 0 时,如果还存在nums2中的元素,则将其拷贝到nums1后面;
PHP代码实现:
class Solution { /** * @param Integer[] $nums1 * @param Integer $m * @param Integer[] $nums2 * @param Integer $n * @return NULL */ function merge(&$nums1, $m, $nums2, $n) { $i = $m - 1; $j = $n - 1; $count = $m + $n - 1; while ($i >= 0 && $j >= 0) { if ($nums1[$i] > $nums2[$j]) { $nums1[$count--] = $nums1[$i--]; } else { $nums1[$count--] = $nums2[$j--]; } } //i = [2,3] j = [1,4,8] while ($j >= 0) $nums1[$count--] = $nums2[$j--]; }}
GO代码实现:
func merge(nums1 []int, m int, nums2 []int, n int) { i, j, count := m - 1, n - 1, m+n-1 for j >= 0 { if i >= 0 && nums1[i] > nums2[j] { nums1[count] = nums1[i] i-- } else { nums1[count] = nums2[j] j-- } count-- }}