1

最初の配列に 1、2、3、4、5、6 が含まれていて、2 番目の配列に 6、7、8 が含まれていた場合、結果の配列には 1、6、2、7、3、8、4、5、6 が含まれている必要があります。これまでのところ、非常に長く複雑に思えますが、2 つの配列の長さが等しい場合にのみ機能します。

これは私が今持っているものです

public static int[] intersperseC(int[] array1, int[] array2)
{
    int[] resultArray = new int[array1.length + array2.length];
    if (array1.length>array2.length)
    {
        for (int i=0; i<array2.length; i++)
        {
            if (i%2 == 0)
                resultArray[i] = array1[i/2];
            else
                resultArray[i] = array2[i/2];
        }
        for (int i=array2.length; i<resultArray.length; i++)
        {
            resultArray[i] = array1[i - array2.length];
        }
    }
    if (array2.length>array1.length)
    {
        for (int i = 0; i<array1.length; i++)
        {
            if (i%2 == 0)
                resultArray[i] = array1[i/2];
            else
                resultArray[i] = array2[i/2];
        }
        for (int i=array1.length; i<resultArray.length; i++)
        {
            resultArray[i] = array2[i - array1.length];
        }
    }
    if (array1.length == array2.length)
    {
        for (int i = 0; i<resultArray.length; i++)
        {
            if (i%2 == 0)
                resultArray[i] = array1[i/2];
            else
                resultArray[i] = array2[i/2];
        }
    }
    else
    {
        System.out.println("I should not be here.");
    }
    return resultArray;
}
4

1 に答える 1

3

別のカーソルで使用できるトリックがよくあります.....

public static int[] intersperseC(int[] array1, int[] array2) {
    int[] resultArray = new int[array1.length + array2.length];
    int cursor = 0;
    for (int i = 0; i < Math.max(array1.length, array2.length); i++) {
        if (i < array1.length) {
            resultArray[cursor++] = array1[i];
        }
        if (i < array2.length) {
            resultArray[cursor++] = array2[i];
        }
    }
    return resultArray;
}    
于 2013-10-29T22:16:59.480 に答える