zoukankan      html  css  js  c++  java
  • [Leetcode] merge sorted array 合并数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array.

    Note: 
    You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.

    题意:给定两已排好的数组,将B合并到A中,A足够长。

    思路:归并排序,只不过这题是要保存在A中,题目中的意思是不要开辟新的空间,所以常规的从左到右的归并排序行不通,我们可以从后面开始。这就涉及一个问题了:将数组A和数组B的最后元素相比较后,较大元素放在哪,即下标为多少?因,题中说,A足够大,所以至少m+n个位置,这样我们就可以将较大值放在下标为m+n-1处了。还有一个问题就是,若n>m,这样,主体的算法结束后,我们要考虑,n中的元素如何处理, 毫无疑问,此时m=0了,所以只需将B中的元素对应的赋给A中即可,代码如下:

     1 class Solution {
     2 public:
     3     void merge(int A[], int m, int B[], int n) 
     4     {
     5         if(n==0)    return;
     6 
     7         while(m>0&&n>0)
     8         {
     9             if(A[m-1]>B[n-1])
    10             {
    11                 A[m+n-1]=A[m-1];
    12                 m--;
    13             }
    14             else
    15             {
    16                 A[m+n-1]=B[n-1];
    17                 n--;
    18             }
    19         }
    20         while(n>0)
    21         {
    22             A[m+n-1]=B[n-1];  //m不写也行,此时,m=0
    23             n--;
    24         }
    25     }
    26 };
  • 相关阅读:
    2019年金秋第八周助教小结
    2019年金秋第七周助教小结
    2019年金秋第五周助教小结
    2019年金秋第四周助教小结
    2019年金秋第三周助教小结
    Java实验报告(一)
    L1-049 天梯赛座位分配 (20 分)
    助教个人总结
    【CF603E】Pastoral Oddities
    机房人物列传
  • 原文地址:https://www.cnblogs.com/love-yh/p/7105313.html
Copyright © 2011-2022 走看看