Merge Sorted Array

来源:互联网 发布:广电怎么看网络电视 编辑:程序博客网 时间:2024/06/06 14:06

问题:将有序数组A和B进行合并,假设A的空间足够,将B合并到A中,并保证合并后有序。

分析:这个问题要是按正常的思路分析,则当需要将B数组的元素插入到A时,A就需要后移,这样的话复杂度就大大增加了,题目中说明A的空间足够,这给了我们提示,我们在前面插入的时候是按升序,从后面的话就是降序,而且不用移动数组。具体过程如下:


初始:index_m = 5, index_n = 3, index = 9.

  if( A[index_m] >= B[index_n])          {              A[index] = A[index_m];              --index_m;              --index;          }          else if(A[index_m] < B[index_n])          {              A[index] = B[index_n];              --index_n;              --index;          }

这就是逐步处理的过程,有些细节也要注意,就是A、B为空的情况。

class Solution {public:    void merge(int A[], int m, int B[], int n) {        //m, n may be 0.       int index = m + n - 1;       int index_m = m - 1;       int index_n = n - 1;       while(index_n >= 0 && index_m >= 0)       {          if( A[index_m] >= B[index_n])          {              A[index] = A[index_m];              --index_m;              --index;          }          else if(A[index_m] < B[index_n])          {              A[index] = B[index_n];              --index_n;              --index;          }       }       while(index_n >= 0)       {           A[index] = B[index_n];           --index_n;           --index;       }            }};


0 0