我目前正在研究项目,它需要安排一个数组,使得没有相同的数字连续出现。
让$a = [4,1,2,1,3,4,4,4]
,这里数字4连续出现。我需要避免这种情况,所需的输出必须或类似于$a = [4,1,4,1,4,2,3,4]
我做了什么:
$a=[4,1,2,1,3,4,4,4];
for($i=0;$i<count($a)-1;$i++)
{
if($a[$i]==$a[$i+1])
{
$k=$j=$i+1;
while($a[$j]==$a[$k])
{
$k++;
if($k >= count($a))
$k=0;
}
$temp=$a[$j];
$a[$j]=$a[$k];
$a[$k]=$temp;
}
}
var_dump($a);
输出:
array (size=8)
0 => int 4
1 => int 4
2 => int 2
3 => int 1
4 => int 3
5 => int 4
6 => int 1
7 => int 4
这里有4个连续出现。
有没有简单的方法来实现这一目标?请帮我解决这个问题。
提前致谢。
答案 0 :(得分:2)
试试这个 -
$a=[4,1,2,1,3,4,4,4];
$n = count($a);
for($k=0;$k<$n;$k++)
{
for($i=0;$i<$n-1;$i++)
{
if($a[$i]==$a[$i+1])
{
$cir = ($i+$k)%$n;
$temp=$a[$i+1];
$a[$i+1]=$a[$cir];
$a[$cir]=$temp;
}
}
}
var_dump($a);