Javatpoint标志
Javatpoint标志

Python程序移动所有的零数组的结束

在本教程中,我们将编写Python程序来移动数组末尾的所有零。问题的陈述是一个给定的随机数数组在0的随机位置包含一些0,但我们需要保持给定数组的顺序。例如:

如果给定的数组是[2,7,6,0,9,0,1,0,0,8,0],它应该转换为[2,7,6 .]9,1,8,0,0,0,0,0,0]。数组保持了数组中项目的相对顺序。期望时间复杂度为O(n),额外空间为O(1)。

的例子,

有几种方法可以解决这个问题,我们将使用一些方法来解决这个令人兴奋的问题。

解决方案实现

在这个方法中,我们从左到右遍历给定的数组,并将元素放在数组中下一个可用的位置。一旦所有非零元素被放置,我们将所有剩余的下标都填充为零。

让我们通过Python程序实现这种方法。

的例子,

输出:

[8,7,4,2,1,0,0,0]

解释,

在上面的代码中,定义了move_zero ()函数,该函数以列表作为参数。在函数内部,我们将变量初始化为0,这将跟踪下一个可用的下标位置。然后,遍历列表并检查当前元素是否非零;如果为真,则将其放在下一个位置,并增加k的计数器。一旦所有非零元素都存储在列表中,我们从k给定列表的长度。对于剩下的下标,我们把0放在列表的末尾。

〇时间的复杂性时间复杂度为0(n),其中n为输入的大小。

上述解决方案很容易实现。让我们来理解另一个解。

方法二:使用快速排序的分区逻辑

我们也可以通过快速排序的分配逻辑来解决这个问题。在这种方法中,我们将0作为枢轴,并进行一次分区过程。分区逻辑读取所有元素,并将每个非主元与主元的第一次出现进行交换。

让我们来理解下面的例子。

的例子,

输出:

[6,8,2,3,4,1,0,0,0]

解释,

在上面的代码中,我们创建了一个swap函数来交换元素。然后,我们创建了分区()方法,该方法调用swap方法,每次遇到非零的“j”都会增加。元素被放置在枢轴之前。

上述代码的时间复杂度为0(n),其中n为输入的大小。

结论

在本教程中,我们讨论了上述问题的一些解决方案。这是一个Python列表相关的入门问题,这个问题可以在技术面试中被问到。







Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map