小编典典

将项目重新排列成一个没有彼此相邻的相似项目的数组

algorithm

可以说我有很多积木。12是红色,8是蓝色,5是黄色,1是绿色。我需要创建一种算法,将这些对象输出到单个数组中,彼此之间没有红色块,彼此之间没有蓝色块,等等。输出应如下所示:

红色,蓝色,红色,蓝色,红色,蓝色,黄色,蓝色,绿色,红色,黄色等

到目前为止,在我的编程经验中,我来到了不得不编写算法多次执行此操作的地方。我上一次这样做是在大约2年前为一家初创公司工作。我在python中实现了这样的算法,但是源代码不可用。我确实记得我花了至少100行来创建。

这个算法有名字吗?我不想再次实施它。


阅读 291

收藏
2020-07-28

共1个答案

小编典典

我不知道这个问题的名字。下面是我想出的算法。

您需要跟踪剩余的每个块的#个。

repeat:
output 1 block of largest color set.
output 1 block from the second largest color set.

输出:

rbrbrbrgrbrgrbrgrbr grggy

注意:在运行此算法之前,您需要检查最大颜色集的大小是否大于1 +其他颜色大小的总和。如果是这样,那就没有解决办法。

注意:不需要从第二大集合中进行选择。循环中的第二个选择可以来自任何非最大的颜色集。

2020-07-28