【问题标题】:Interleave two arrays [closed]交错两个数组[关闭]
【发布时间】:2014-09-08 22:04:13
【问题描述】:

我尝试使用返回类型整数随机排列两个数组。例如,我有 {1, 2, 3} 和 {0, 5}。我得到的结果是{1,0}。所以,我不确定如何打印数组中的其余数字。

这是我所拥有的:

public int[] shuffle(int[] A, int[] B) {
    int shuff = 0;
    int[] out = { A[shuff], B[shuff] };

    for (int i = 0; i < A.length; i++) {
        for (int j = 0; j < B.length; j++) {
            int shuffle = A[i];
            A[i] = B[j];
            B[j] = shuffle;
        }
    }
    return out;
}

【问题讨论】:

  • 您的预期结果是什么?
  • 我不认为你可以称之为“洗牌”..洗牌是随机的,如果我正确阅读了代码,你只需切换位置
  • 我想要的结果是{1,0,2,5,3}
  • “交错”可能更合适?

标签: java arrays


【解决方案1】:

与:

int[] out = { A[shuff], B[shuff] };

您只是放置 A 的第一个数字和 B 的第一个数字,您的循环根本不重要。然后你返回,所以它总是返回{1,0}

如果您期望结果为:{1, 0, 2, 5, 3} 我会这样写:

public static int[] interleave(int[] a, int[] b) {
    int[] out = new int[a.length + b.length];
    int j = 0;
    int maxLength = Math.max(a.length, b.length);
    for (int i = 0; i < maxLength; i++) {
        if (i < a.length) {
            out[j++] = a[i];
        }
        if (i < b.length) {
            out[j++] = b[i];
        }
    }
    return out;
}

运行 sn-p: http://rextester.com/ISTE29382

【讨论】:

  • 虽然是正确的,但这更像是一个评论而不是一个答案
  • 编辑,添加示例解决方案
【解决方案2】:

这是一个更通用的解决方案:

public static void main(String... args) throws IOException {
     Integer []a={1, 2, 3},b= {0, 5};
     System.out.println(interweave(Arrays.asList(a),Arrays.asList(b)));
}
public static <t> List<t> interweave(List<t> ... lists) {
    int max=0,sum=0;
    for(List<t> l:lists){
        assert l!=null;
        if(l.size()>max){
            max=l.size();
        }
        sum+=l.size();
    }
    List<t> ret=new ArrayList<>(sum);
    for(int i=0;i<max;i++){
        for(List<t> l:lists){
            if(i<l.size()){
                ret.add(l.get(i));
            }
        }
    }
    return ret;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 2022-11-01
    • 2020-07-09
    • 2022-01-06
    相关资源
    最近更新 更多