C++程序 将所有零移动到数组末尾
给定一个随机数的数组,在给定数组中将所有0的项推到数组的末尾。例如,如果给定的数组是{1,9,8,4,0,0,2,7,0,6,0},则应更改为{1,9,8,4,2,7,6,0,0,0,0}。所有其他元素的顺序应保持不变。预计的时间复杂度为O(n),额外空间为O(1)。
例如:
可以有很多方法来解决这个问题。以下是解决此问题的一种简单有趣的方法。
从左到右遍历给定的数组‘arr’。在遍历时,维护数组中非零元素的计数。让计数为‘count’。对于每个非零元素arr[i],将元素放在‘arr[count]’的位置,并增加‘count’。遍历完成后,所有非零元素已经被移至前面,并将‘count’设置为第一个0的索引。现在,我们所需要做的就是运行一个循环,将所有元素从‘count’到数组的末尾变为零。
以下是上述方法的实现。
输出:
时间复杂度: ** O(n),其中n是输入数组中元素的数量。
辅助空间: O(1)
其他方法:
假设开始元素为枢轴,当遍历数组时,如果遇到非零元素,则将该元素与枢轴交换,并增加索引。这将继续进行,直到所有非零元素放在左侧,所有零放在右侧。
输出
时间复杂度 : O(n) ,其中 n 是输入数组中的元素数。
辅助空间 : O(1)