【问题标题】:Mixing of two arrays混合两个数组
【发布时间】:2018-10-31 12:20:12
【问题描述】:

我需要一些帮助。最近开始学习编程,我遇到了遇到问题的任务。任务是:有两个对象数组和步骤数。目标是合并它们,然后在每一步中,如果来自不同数组的两个对象相遇,则交换它们,但它们每个都只去一个方向。我不需要实现,只需要算法方面的帮助。

数组 1:A、B、C 数组 2:1,2,3(这两个数组每个都可以大于 3 个对象并且没有 长度相同) 合并数组:A,B,C,1,2,3 步数:5

第 1 步:A,B,1,C,2,3

第 2 步:A,1,B,2,C,3

步骤 3:1,A,2,B,3,C

步骤 4:1,2,A,3,B,C

步骤 5:1,2,3,A,B,C

我的尝试是:

public void Move(int steps)
    { for (int i = 0; i<steps; i++)
        {for (int j = 0; j<mergedArray.size()-1; j++){
        if (!mergedArray.get(j).getType().equals(mergedArray.get(j+1).getType()))
                { Collections.swap(mergedArray, j, j+1);
                j++;
                }
        }
    }

但这只适用于一半的步骤。

感谢您的帮助!

编辑:代码中的固定数组边界

【问题讨论】:

    标签: java arrays algorithm


    【解决方案1】:

    我看到的一个问题是你的 for 循环会遇到麻烦。你有for(int j = 0; j &lt; mergedArray.size(); j++) { ... },在循环中你有mergedArray.get(j+1),所以如果你不小心,你会很快碰到ArrayOutOfBoundsException。除此之外,看起来很合理,我实现了一个类似的,它按照它应该的方式拆分东西。

    【讨论】:

      【解决方案2】:

      它不会是最快的算法,但应该可以工作。 你有 2 个循环:

      1st :你迭代单元达到步骤数,你在这里有一个很好的实现。 第二:就在数组中的元素相遇之后,您需要在此循环中停止迭代。使用继续。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 2016-06-11
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-20
        相关资源
        最近更新 更多