如何随机排列没有两个重复项的对象数组?

问题描述 投票:-3回答:1

我需要重新整理从API接收的对象数组。该数组将重复出现对象。

有效输入:

  • [“ a”,“ a”,“ a”,“ a”,“ b”,“ b”,“ b”,“ b”,“ c”,“ c”,“ c”,“ c” ]
  • [[“ a”,“ a”,“ b”,“ b”]或[“ b”,“ b”,“ a”,“ a”]

无效的输入:

  • [[“ a”,“ a”,“ a”,“ a”,“ b”,“ c”]] >>
  • [[“ a”,“ b”,“ a”,“ b”]
  • 洗牌后:

  • i和i + 1处的对象应该不同
  • 每次对数组进行混洗时,都应该生成一个新的有效解决方案
  • 有效输出:

  • b,a,c,b,a,c,a,c,b,a,c,b
  • c,a,b,a,b,c,a,c,b,a,b,c
  • c,b,a,c,b,a,c,b,a,c,b,a
  • 无效的输出:

  • c,c,a,b,b,a,c,b,a,c,b,a
  • 我开始使用Fisher-Yates进行初始混洗,然后验证解决方案是否有效。一旦设置了少量设置,这种蛮力方法就可以使用,但是随着输入的增加,它变得毫无用处。有没有一种有效的方法来生成随机排列而又不会使重复项彼此相邻?

Efficient algorithm for ordering different types of objects深入了解了如何使相同种类的对象彼此保持距离,不幸的是,如果尝试再次随机播放,将遇到相同的解决方案/模式。

[https://stackoverflow.com/a/32366585/4271233生成满足”没有彼此相邻的两个重复项”的所有可能排列,但是可悲的是,我需要生成所有它们,然后随机选择一个

我需要重新整理从API接收的对象数组。该数组将重复出现对象。有效输入:[“ a”,“ a”,“ a”,“ a”,“ b”,“ b”,“ b”,“ b”,“ c”,“ c”,“ c”,“ c “] [” a“,” ...

java arrays algorithm shuffle
1个回答
0
投票

此解决方案不是最佳解决方案,但您可以从此开始

© www.soinside.com 2019 - 2024. All rights reserved.