[LeetCode]Move Zeroes

题目描述:

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

题目大意:

给定一个数组nums,编写函数将数组内所有0元素移至数组末尾,并保持非0元素相对顺序不变。

例如,给定nums = [0, 1, 0, 3, 12],调用函数完毕后, nums应该是 [1, 3, 12, 0, 0]。

注意:

  1. 你应该“就地”完成此操作,不要复制数组。
  2. 最小化操作总数。

解题思路:

题目可以在O(n)时间复杂度内求解

算法步骤:

使用两个"指针"x和y,初始令y = 0

利用x遍历数组nums:

若nums[x]非0,则交换nums[x]与nums[y],并令y+1

算法简析:

y指针指向首个0元素可能存在的位置

遍历过程中,算法确保[y, x)范围内的元素均为0

Python代码:

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        y = 0
        for x in range(len(nums)):
            if nums[x]:
                nums[x], nums[y] = nums[y], nums[x]
                y += 1

 

本文链接:http://bookshadow.com/weblog/2015/09/19/leetcode-move-zeroes/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。

如果您喜欢这篇博文,欢迎您捐赠书影博客: ,查看支付宝二维码

Pingbacks已关闭。

暂无评论

张贴您的评论