【发布时间】:2020-08-27 13:04:41
【问题描述】:
所以我一直在尝试合并 2 个预排序数组并将其变成 1 个排序数组。现在预排序的数组有重复的元素。这是我所拥有的
public class TwoWayMerge {
public void merge(int[]a,int m,int[]b,int n)
{
//a=50,50,50,87,88
//b=10,20,50,89,89,120
//m=5 length of a
//n=6 length of b
//c is new array
int i=0,j=0,k=0;
int[]c=new int[m+n];
while(i<m && j<n && k<m+n )
{
if(i<m && j<n && k<m+n && a[i]<=b[j])
{
c[k]=a[i];
i=i+1;
}
if(i<m && j<n && k<m+n && b[j]<=a[i])
{
c[k]=b[j];
j=j+1;
}
k=k+1;
}
if(i==m-1)
{
while(j<n && k<m+n )
{
c[k]=b[j];
k++;
j++;
}
}
if(j==n-1)
{
while(i<m && k<m+n)
{
c[k]=a[i];
k++;
i++;
}
}
for(i=0;i<m+n;i++)
{
System.out.print(c[i]+" ");
}
}
public static void main(String[] args) {
TwoWayMerge obj=new TwoWayMerge();
int[] a= {50,50,50,87,88};//i4
int[] b= {10,20,50,89,89,120};//j5
obj.merge(a,5,b,6);
}
}
现在在这一步
a[i]<=b[j]
b[j]<=a[i]
将执行两次,我只得到 3 个“50”而不是 4 个,因为我们在两个数组中有共同的元素,它们也有重复。
我的输出
10 20 50 50 50 87 88 0 0 0
预期输出
10 20 50 50 50 50 87 88 89 89 120
卡在这里,需要建议。
感谢阅读。
【问题讨论】:
-
请提供完整的minimal-reproducible-example。目前您的代码存在编译时错误。初始化你评论过的变量,把你的输出和预期的输出。
-
是的,但回答者可能需要在发布之前验证他们的解决方案。为此,您需要发布可以编译的代码。