美文网首页
[easy][Array][Two-pointer]283.Mo

[easy][Array][Two-pointer]283.Mo

作者: 小双2510 | 来源:发表于2017-11-23 11:37 被阅读0次

    原题:

    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:
    You must do this in-place without making a copy of the array.
    Minimize the total number of operations.

    思路:

    一看到array的In-place的操作,就要联想到两指针。那么两指针该怎么操作呢?
    设想学生的排队问题,一个指针j负责去找非0的元素回来,一个指针i负责守住下一个要更新的位置点。找回来的非0元素大胆地去挤占原有元素的位置,剩余的位置全都赋值0就行了。

    代码:

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

    相关文章

      网友评论

          本文标题:[easy][Array][Two-pointer]283.Mo

          本文链接:https://www.haomeiwen.com/subject/vfqzvxtx.html