有一个可重复元素的数组(例如[1,2,2,3,3,3,4,5,5]),要将其乱序,并且要求相邻的两个数字不能相同,该怎么办?
1、佛性法:完全随机打乱顺序,不满足则重新随机打乱。
2、回溯法,一步一步尝试,先随机取一个数作为第一个数,再随机取一个数作为第二个数,若第二个数不满足,再重新取第二个数,若第二个数始终不满足,则退回到上一步,重新选第一个数(运气不好的话到了第九步不满足,可能要连续退八步退到第一步),若满足,则选择下一个数,依此递推。不知道这个方法行不行。
算法与数据结构是一起的,没有结构何来算法呢。
给你一个结构,你肯定能很快想出合适的算法。

1赞
1,排序从小到大
2,遍历,假如当前数组下标索引i跟i-1的数值相同,i跟最后的元素交换位置,需要考虑当前i就是最后元素;
或者i+1所有元素往前移动,i放到数组最后
遇事不决桶排序。太真实了,不过这个问题确实用桶排序分裂开,再根据桶的key去取数字效果最佳。
1赞
取出一个数,将原容器中相同的数放到另一个容器A中,再取一个数,相同放到一个容器B中,将容器A的数放回原容器中,取一个数,如此循环
楼上的额如果最后遇到3,3,3呢
间隔插入已生成的序列中
原始数组还得判断重复数的个数,不然重复的数多了总会有相邻的
像这种算法问题很多解决方案的楼上的方法都可以试试,写出来调试数据多点看看消耗和性能,选出最适合自己使用的