java - 如果数组具有重复的元素,则在Java中进行2路合并
问题描述
所以我一直在尝试合并 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
卡在这里,需要建议。
谢谢阅读。
解决方案
在您的代码中,您到达了数组的末尾a
并且您的循环终止了。
int[] a = {50, 50, 50, 87, 88};
int[] b = {10, 20, 50, 89, 89, 120};
int m = 5;
int n = 6;
int i = 0, j = 0, k;
int[] c = new int[m + n];
for (k = 0; k < m + n && i < m && j < n; k++) {
if (a[i] <= b[j]) {
c[k] = a[i++];
} else {
c[k] = b[j++];
}
}
for (; i < m; i++) {
c[k++] = a[i];
}
for (; j < n; j++) {
c[k++] = b[j];
}
System.out.println(Arrays.toString(c));
// [10, 20, 50, 50, 50, 50, 87, 88, 89, 89, 120]
a
您需要两个额外的循环,迭代or的剩余元素b
,如果有的话。
边注:
if(i<m && j<n && k<m+n && a[i]<=b[j])
无需在这里再次检查循环条件。您可以将其简化为:
if (a[i] <= b[j])
编辑后,我可以看到您的问题非常简单:
if(j==n-1)
在这里,如果
j
是在第一个位置呢?
例子
a = {1, 2, 3, 4, 5};
b = {6, 7, 8, 9};
你j
会的0
。您需要将相同的条件更改为:
if (j <= n - 1)
同样对于i
。
推荐阅读
- python - getattr(sys, 'frozen', False) 2 个不同的打包可执行文件中的问题
- vue.js - 如何使用 Nuxt-Auth 设置会话?
- excel - 将工作表拆分为工作簿
- wordpress - 如何将带有 git sync 的 sidecar 容器添加到 wordpress helm 部署?
- mysql - 为什么会死锁(使用innodb)?
- visual-studio-code - vscode:设置窗口大小的最快方法
- reactjs - ReactNative TCP 套接字
- python - os.environ 没有显示一些环境变量
- python - 当我尝试通过 paramiko 模块 python 的 exec 命令运行 npm install 时出现错误
- vue.js - 如何计算 Vue.js 中嵌套数组中的值?