leetcode 数组之283 移动零

148 阅读1分钟

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:

必须在原数组上操作,不能拷贝额外的

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/mo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution(object):
    def moveZeroes(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        left = right = 0
        while right < n:
            if(nums[right]!=0):
                nums[left],nums[right] = nums[right],nums[left]
                left += 1
            right += 1

主要用双指针方法来解决此问题,初始LR指针都指向0个元素,R指针遇到0继续迭代,也就是L指在零位置,当R遇到非零则交换两个指针的数据,把右指针的非0数据赋给L,L的零赋给R形成交换,依此类推。

注意点,1.指针初始位置都指向0,左指针指向交换前或交换后的0元素 2. 右指针条件是判断交换的,每次判断条件成立后做两件事,交换元素,并且left指针加1,并且完成后right也要加1 3. 当right=0也要继续移动元素+1

   思考的问题:两个指针的负责部分,如何交换,交换指针移动,以及迭代条件。

python对于数据交换有独立的方法 www.v2ex.com/t/483347