合并两个有序数组(Leetcode)
解题思路:
-
三个指针:
$p1
: 指向nums1
中的最后一个非零元素。$p2
: 指向nums2
的最后一个元素。$p
: 指向nums1
的最后一位,用于存储合并后的元素。
-
从后往前填充:
- 比较
nums1[$p1]
和nums2[$p2]
,较大的放入nums1[$p]
,指针向前移动。
- 比较
-
处理剩余元素:
- 如果
nums2
中还有剩余的元素(p2 >= 0
),直接拷贝到nums1
。
- 如果
-
无需处理
nums1
剩余的元素:- 因为
nums1
的前半部分已经排好序,无需再处理。
- 因为
function merge(&$nums1, $m, $nums2, $n) {
$p1 = $m - 1;
$p2 = $n - 1;
$p = $m + $n - 1;
while($p1>=0 && $p2 >= 0){
if($nums1[$p1] > $nums2[$p2]){
$nums1[$p] = $nums1[$p1];
$p1--;
}else{
$nums1[$p] = $nums2[$p2];
$p2--;
}
$p--;
}
while($p2>=0){
$nums1[$p] = $nums2[$p2];
$p2--;
$p--;
}
}