合并两个有序数组(Leetcode)

时间:2025-01-26 07:55:44

解题思路:

  1. 三个指针

    • $p1: 指向 nums1 中的最后一个非零元素。
    • $p2: 指向 nums2 的最后一个元素。
    • $p: 指向 nums1 的最后一位,用于存储合并后的元素。
  2. 从后往前填充

    • 比较 nums1[$p1]nums2[$p2],较大的放入 nums1[$p],指针向前移动。
  3. 处理剩余元素

    • 如果 nums2 中还有剩余的元素(p2 >= 0),直接拷贝到 nums1
  4. 无需处理 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--;
    }
}