给定两个已按降序排序的数组arr1和arr2,输出一个数组,该数组在按降序排序时附加arr1和arr2的值。
MyApproach
我发现2-3个链接很有用,我注意到我在这里有类似的代码。但是我无法获得预期的输出。
我的一个资源:How to merge two sorted arrays into a sorted array?
任何人都可以指导我做错了吗。
我已经为array1的长度> = array2的长度做了代码,我将稍后添加其他部分
numpy.savez()
public int[] join(int[] arr1,int[] arr2)
{
int l1=arr1.length;
int l2=arr2.length;
int i=0,j=0,k=0;
int c[]=new int[arr1.length+arr2.length];
if(l1>=l2)
{
for(;i<arr1.length;)
{
if(arr1[i]>=arr2[j])
{
c[k]=arr1[i++];
System.out.println(c[k]);
k++;
}
else if(arr2[j]>arr1[i])
{
c[k]=arr2[j++];
System.out.println(c[k]);
k++;
}
}
//System.out.println(j);
//System.out.println(i);
while(i<arr1.length)
{
c[k]=arr1[i++];
System.out.println(c[k]);
k++;
}
while(j<arr2.length)
{
c[k]=arr2[j++];
System.out.println(c[k]);
k++;
}`
}
return c;
//write your code here
}
Parameters ActualOut Expected Out
null {100,90,80,70,60}
答案 0 :(得分:2)
这可能是支持conditional operator ? :
(a ternary operation)的最佳理由。对于您的问题,您需要防范null
输入。然后,您可以利用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
在循环后复制剩余的元素。像
public static int[] join(int[] arr1, int[] arr2) {
if (arr1 == null) {
return arr2;
} else if (arr2 == null) {
return arr1;
}
int p = 0, i = 0, j = 0;
int[] out = new int[arr1.length + arr2.length];
while (i < arr1.length && j < arr2.length) {
out[p++] = (arr1[i] > arr2[j]) ? arr1[i++] : arr2[j++];
}
if (i < arr1.length) {
System.arraycopy(arr1, i, out, p, arr1.length - i);
} else if (j < arr2.length) {
System.arraycopy(arr2, j, out, p, arr2.length - j);
}
return out;
}
我测试的是
public static void main(String args[]) {
int[][] tests = { { 3, 2, 1 }, { 10, 9, 7 }, { 6, 5, 4 } };
System.out.println(Arrays.toString(join(tests[0], join(tests[1], tests[2]))));
}
而且,我得到了
[10, 9, 7, 6, 5, 4, 3, 2, 1]
答案 1 :(得分:2)
虽然我认为Elliot的答案是最好的方法,但我对如何坚持使用代码并使其工作有一些建议。
首先,在您的for
循环中,您的函数开始时,条件为i < l1 && j < l2
,而不是只检查i
(如果您要声明变量,也是如此)对于数组的长度,使用它们!)。这使您可以摆脱if (l1 >= l2)
检查,无论哪个数组更长,都可以使用它。
否则,您的代码似乎功能齐全。我建议的另一个提示是制作join
方法static
。这允许您通过简单地调用join (someArr1, someArr2)
而不是SomeObject.join(someArr1, someArr2)
来独立调用它(因为join
中使用的所有变量都是本地变量,而不是SomeObject
的实例变量。< / p>