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

pri*_*stc 4 algorithm

让我们说我有一个块集合.12是红色,8是蓝色,5是黄色,1是绿色.我需要创建一个算法,将这些对象输出到一个数组中,彼此相邻,没有红色块,没有蓝色块彼此相邻,等等.输出应该如下所示:

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

到目前为止,在我的编程经验中,我来到了不得不写一个算法的地方.我最后一次这样做是在大约两年前为创业​​公司工作.我在python中实现了这样的算法,但源代码不可用.我记得我花了至少100行创作.

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

Col*_*n D 6

我不知道这个问题的名称.下面是我想出来解决它的算法.

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

repeat:
output 1 block of largest color set.
output 1 block from the second largest color set.
Run Code Online (Sandbox Code Playgroud)

输出:

rbrbrbrbrgrbrgrgrgrgr grbgy

注意:在运行此算法之前,您需要检查最大颜色集的大小是否大于1 +其他颜色大小的总和.如果是,则没有解决方案.

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