思想:A数组:大小m,B数组:大小n
将B合并到A中,已知A充分大(>=m+n),充分利用这一信息,从A尾部进行比较排序。常见的合并2个有序数组都是到第三个数组中,此题为合并到第一个数组中。
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int ia=m-1;
int ib=n-1;
int cur=m+n-1;
while(ia>=0 && ib>=0) {
A[cur--] = A[ia] >= B[ib] ? A[ia--] : B[ib--];
}
while(ib>=0) {
A[cur--] = B[ib--];
}
}
};java code:
public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int la = m - 1;
int lb = n - 1;
int cur = m + n - 1;
while(la >= 0 && lb >= 0) {
nums1[cur--] = nums1[la] >= nums2[lb] ? nums1[la--] : nums2[lb--];
}
while(lb >= 0) {
nums1[cur--] = nums2[lb--];
}
return;
}
}
本文介绍了一种优化方法,通过直接在原始数组的尾部进行比较排序,合并两个有序数组,避免了创建额外数组带来的内存消耗。详细阐述了C++和Java两种实现方式,展示了如何在已有数组容量足够的情况下,实现高效的数据整合。
322

被折叠的 条评论
为什么被折叠?



