你会如何尽可能少地解决这个问题?

时间:2014-07-07 14:29:03

标签: java arrays

给定2个int数组,a和b,返回一个新的数组长度2,其中包含a的元素,后跟b中的元素。阵列可以是任何长度,包括0,但是在2个阵列之间将有2个或更多个元素可用。

make2({4, 5}, {1, 2, 3}) → {4, 5}
make2({4}, {1, 2, 3}) → {4, 1}
make2({}, {1, 2}) → {1, 2}

基本方法是:

public int[] make2(int[] a, int[] b) {
int[] c = new int[]{0,0};
if(a.length<1 && b.length>1)
  c = new int[]{b[0],b[1]};
if(a.length ==1 && b.length==1)
  c = new int[]{a[0],b[0]};
if(a.length ==1 && b.length>=2)
  c = new int[]{a[0],b[0]};
if(a.length >=2 && b.length<2)
  c = new int[]{a[0],a[1]};
if((a.length>=2)&&(b.length>=2))
  c= new int[]{a[0],a[1]};
return c;
} 

演习来自CodingBat.com

4 个答案:

答案 0 :(得分:2)

可能不是这个问题的创造者想到了什么,但是到底是什么:

static Integer[] combine( Integer[] a, Integer[]b ){
    List<Integer> intList = new ArrayList<>();
    intList.addAll( Arrays.asList( a ) );
    intList.addAll( Arrays.asList( b ) );
    return Arrays.copyOf( intList.toArray( a ), 2 );
}

采用更传统的方法:

static Integer[] combine( Integer[] a, Integer[]b ){
    if( a.length >= 2 ){
        return Arrays.copyOf( a, 2 );
    } else {
        if( a.length == 1 ){
            return new Integer[]{ a[0], b[0] };
        } else {
            return Arrays.copyOf( b, 2 );
        }
    }
}

答案 1 :(得分:1)

使用一些循环!

public static int[] make2(int[]... arrays) {
    int[] result = new int[2];
    int i = 0;
    for (int[] array : arrays) {
        for (int value : array) {
            result[i++] = value;
            if (i > 1)
                return result;
        }
    }
    return result;
}

如果你不喜欢varargs参数,你可以这样做:

public static int[] make2(int[] a, int[] b) {
    int[][] arrays = new int[][] {a, b};
    ...
}

答案 2 :(得分:1)

这就是我解决它的方式。总共2个if语句。

public int[] make2(int[] a, int[] b) {
    if (a.length == 0) {
        return new int[] {b[0], b[1]};
    }
    if (a.length > 1) {
        return new int[] {a[0], a[1]};
    }
    return new int[] {a[0], b[0]};
}

答案 3 :(得分:0)

首先,您可能最好将此类问题发布到CodeReview

不要以你做的方式做,不管有多少,因为解决方案对于特定情况非常狭窄(想想现在必须使用3个数字)并且它不会做任何使用Java典型的功能。最好尝试考虑更通用的解决方案并至少使用Java类。

独立于该注释,只需遍历源列表/数组,直到目标中有足够的数据。