Merge Sorted Array

Q:

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.

A:

原题已经说了A有足够的空间存储B,我为自己写出了如此sb的代码而感到羞愧。记录下来以做纪念。

class Solution {
 public:
  void merge(int A[], int m, int B[], int n) {
    // Start typing your C/C++ solution below
    // DO NOT write int main() function
    int* C = new int[m + n];
    int i = 0;
    int j = 0;
    int k = 0;
    while (i < m && j < n) {
      if (A[i] < B[j]) {
        C[k++] = A[i];
        ++i;
      } else {
        C[k++] = B[j];
        ++j;
      }   
    }   
    for (; i < m; ++i) {
      C[k++] = A[i];
    }   
    for (; j < n; ++j) {
      C[k++] = B[j];
    }   
    for (int l = 0; l < m + n; ++l) {
      A[l] = C[l];
    }   
    delete [] C;
  }
};

 

最好的做法如下,烦躁阿,如此清晰的代码,come on!
class Solution {
 public:
  void merge(int A[], int m, int B[], int n) {
    // Start typing your C/C++ solution below
    // DO NOT write int main() function
    while (n > 0) {
      if (m <= 0 || A[m - 1] <= B[n - 1]) {
        A[m + n - 1] = B[--n];
      } else {
        A[m + n - 1] = A[--m];
      }
    }
  }
};

 

posted @ 2013-06-13 18:39  dmthinker  阅读(91)  评论(0)    收藏  举报