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列表相关的入门问题,这个问题可以在技术面试中被问到。
下一个话题
Python中的常规字典与有序字典
|