Php 程序将所有零移动到数组末尾
给定一个随机数数组,将给定数组的所有零推到数组的末尾。例如,如果给定的数组是{1,9,8,4,0,0,2,7,0,6,0},则应该将其更改为{1,9,8,4,2,7,6,0,0,0,0}。所有其他元素的顺序应该相同。预期时间复杂度为 0(n),额外空间为 0(1)。 例:
Input : arr[] = {1, 2, 0, 4, 3, 0, 5, 0};
Output : arr[] = {1, 2, 4, 3, 5, 0, 0};
Input : arr[] = {1, 2, 0, 0, 0, 3, 6};
Output : arr[] = {1, 2, 3, 6, 0, 0, 0};
有很多方法可以解决这个问题。下面是一个简单有趣的方法来解决这个问题。 从左到右遍历给定的数组“arr”。遍历时,保持数组中非零元素的计数。让计数成为“计数”。对于每个非零元素 arr[i],将该元素置于' arr[count]'并递增' count '。在完成遍历后,所有非零元素已经被转移到前端,“计数”被设置为第一个 0 的索引。现在我们所需要做的就是运行一个循环,使所有元素从“计数”到数组结束都为零。 以下是上述方法的实现。
服务器端编程语言(Professional Hypertext Preprocessor 的缩写)
<?php
// A PHP program to move all
// zeroes at the end of array
// Function which pushes all
// zeros to end of an array.
function pushZerosToEnd(&$arr, $n)
{
// Count of non-zero elements
$count = 0;
// Traverse the array. If
// element encountered is
// non-zero, then replace
// the element at index
// 'count' with this element
for ($i = 0; $i < $n; $i++)
if ($arr[$i] != 0)
// here count is incremented
$arr[$count++] = $arr[$i];
// Now all non-zero elements
// have been shifted to front
// and 'count' is set as index
// of first 0\. Make all elements
// 0 from count to end.
while ($count < $n)
$arr[$count++] = 0;
}
// Driver Code
$arr = array(1, 9, 8, 4, 0, 0,
2, 7, 0, 6, 0, 9);
$n = sizeof($arr);
pushZerosToEnd($arr, $n);
echo "Array after pushing all " .
"zeros to end of array :
";
for ($i = 0; $i < $n; $i++)
echo $arr[$i] . " ";
// This code is contributed
// by ChitraNayal
?>
输出:
Array after pushing all zeros to end of array :
1 9 8 4 2 7 6 9 0 0 0 0
时间复杂度: O(n),其中 n 为输入数组中的元素个数。 辅助空间: O(1)
详情请参考将所有零移到数组末尾的完整文章!
版权属于:月萌API www.moonapi.com,转载请注明出处