• 合并排序数组


    合并两个排序的整数数组A和B变成一个新的数组。

    给出A = [1, 2, 3, empty, empty] B = [4,5],

    合并之后A将变成[1,2,3,4,5]。

    其中,假设数组A有足够大的空间,也就是说,如果A的非空元素个数为m,B的非空元素个数为n,那么A的空间容量一定是大于等于m+n的

     1 <?php
     2 /**
     3  * 合并两个排序的整数数组A和B变成一个新的数组(A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素)
     4  * A = [1, 2, 3, empty, empty], B = [4, 5]
     5  * 合并之后A将变成[1, 2, 3, 4, 5]
     6  */
     7 
     8 /**
     9  * A = [1, 2, 3, empty, empty]
    10  * B = [4, 5]
    11  * m = 3
    12  * n = 2
    13  * m+n-1=4
    14  * 所以从A[4]这个位置,向前开始赋值
    15  * a.比较A[2]=3和B[1],因为A[2]<B[1],所以A[4]=B[1]=5
    16  * b.比较B[0]和A[2],大者赋值给A[3]
    17  * c.按照这个规则持续扫描,直到有一个扫描完为止
    18  *
    19  * 其中一个扫描完了,怎么办?
    20  * 如果A先扫描完,可以想象,情况是这样:假如A = [4, 5, 6, empty, empty]; B = [1, 2] 则最终会变成A = [4, 5, 4, 5, 6],所以需要将B剩余部分[1, 2]分别赋值给A的还没赋值的部分
    21  * 如果B先扫描完,则不需要作任何操作(A前面也是排好序的)
    22  */
    23 function solution($a, $b)
    24 {
    25     //默认$a,$b均不为空,不作参数校验
    26     $size = count($a) - 1;//数组$a的尾下标
    27     $n = count($b) - 1;
    28     $m = $size - $n - 1;
    29     
    30     while($n>=0 && $m>=0) {
    31         if($a[$m] < $b[$n]) {
    32             $a[$size] = $b[$n];
    33             $n--;
    34         } else {
    35             $a[$size] = $a[$m];
    36             $m--;
    37         }
    38         $size--;
    39     }
    40     
    41     //假如$b先循环完,没有问题;但是如果$a先循环完,则会出现问题;
    42     //例:A = [4, 5, 6, empty, empty]; B = [1, 2] 则最终会变成A = [4, 5, 4, 5, 6]
    43     while($n>=0) {
    44         $a[$n] = $b[$n];
    45         $n--;
    46     }
    47     return $a;
    48 }
    49 
    50 $a = [1, 2, 3, 0, 0];//0代表空
    51 $b = [4, 5];
    52 $res = solution($a, $b);
    53 echo "<pre>";
    54 print_r($res);
    55 
    56 $a = [4, 5, 6, 0, 0];//0代表空
    57 $b = [1, 2];
    58 $res = solution($a, $b);
    59 echo "<pre>";
    60 print_r($res);
  • 相关阅读:
    hdu 3268 09 宁波 现场 I
    hdu 3697 10 福州 现场 H
    CodeForces Round #521 (Div.3) D. Cutting Out
    #Leetcode# 226. Invert Binary Tree
    zufe 蓝桥选拔
    #Leetcode# 100. Same Tree
    #Leetcode# 6. ZigZag Conversion
    PAT 1084 外观数列
    #Leetcode# 38. Count and Say
    #Leetcode# 22. Generate Parentheses
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/8870724.html
Copyright © 2020-2023  润新知