https://oj.leetcode.com/problems/merge-sorted-array/
归并排序的一步操作,需要事先把A[]的元素移到数组末端,前段空出来填充结果。需要注意的是如果从0~m的转移会在n比较小的时候有问题。所以要从m~0转移。使用memcpy在GCC下就是从0~m开始转移,这个行为跟MSVC不一样。
class Solution { public: void merge(int A[], int m, int B[], int n) { //memcpy(A+n,A,m*sizeof(int)); //error in gcc, succeed in msvc because of filling order for(int i=m-1;i>=0;i--) A[i+n]=A[i]; int p=n; int q=0; int r=0; while(p<n+m && q<n){ if (A[p]>B[q]) { A[r]=B[q]; r++;q++; } else { A[r]=A[p]; r++;p++; } } while(p<n+m) A[r++]=A[p++]; while(q<n) A[r++]=B[q++]; } };
时间: 2024-12-29 17:15:02