题意:
解题思路:
思路: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--
}
}