可以说我有很多积木。12是红色,8是蓝色,5是黄色,1是绿色。我需要创建一种算法,将这些对象输出到单个数组中,彼此之间没有红色块,彼此之间没有蓝色块,等等。输出应如下所示:
红色,蓝色,红色,蓝色,红色,蓝色,黄色,蓝色,绿色,红色,黄色等
到目前为止,在我的编程经验中,我来到了不得不编写算法多次执行此操作的地方。我上一次这样做是在大约2年前为一家初创公司工作。我在python中实现了这样的算法,但是源代码不可用。我确实记得我花了至少100行来创建。
这个算法有名字吗?我不想再次实施它。
我不知道这个问题的名字。下面是我想出的算法。
您需要跟踪剩余的每个块的#个。
repeat: output 1 block of largest color set. output 1 block from the second largest color set.
输出:
rbrbrbrgrbrgrbrgrbr grggy
注意:在运行此算法之前,您需要检查最大颜色集的大小是否大于1 +其他颜色大小的总和。如果是这样,那就没有解决办法。
注意:不需要从第二大集合中进行选择。循环中的第二个选择可以来自任何非最大的颜色集。