[easy][Array][Two-pointer]283.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:
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容