题目:

解决方法:数组+双指针,倒着存,数据的挪动会少一些
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int tag = n + m - 1;
int i = m-1;
int j = n-1;
while(i>=0 || j>=0){
if(i<0)
A[tag--] = B[j--];
else if(j<0)
A[tag--] = A[i--];
else{
if(A[i]>B[j])
A[tag--] = A[i--];
else if(A[i]<B[j])
A[tag--] = B[j--];
else
{
A[tag--] = A[i--];
A[tag--] = B[j--];
}
}
}
}
}
简化一下:
public class Solution {
public void merge(int A[], int m, int B[], int n) {
int tag = n + m - 1;
int i = m-1;
int j = n-1;
while(j>=0){
if(i<0)
A[tag--] = B[j--];
else{
if(A[i]>B[j])
A[tag--] = A[i--];
else
A[tag--] = B[j--];
}
}
}
}
时间复杂度:O(n)
空间复杂度:O(1)
该博客讨论了一种使用双指针技巧解决数组合并的方法,优化了数据移动操作,降低了时间复杂度到O(n)。代码实现中,首先设置指向数组末尾的指针,然后比较两个指针所指元素,将较小的元素放入目标位置,直至所有元素合并完毕。简化后的代码更加精炼。

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



