LeetCode第283题移动零(Python)

不想你离开。 提交于 2019-12-02 09:12:20

题目描述

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

示例1:

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

说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

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

解题方法和思路

带*的表示参考其他人的是实现

设定两个索引,交换元素

思路:

  1. 初始化索引pq,位置为数组中第一个0元素出现的地方的索引,例如如下所示:

     [0,1,0,3,12]
      ^
      p=q
    
  2. 前进q索引,碰到非零元素则和p索引交换,交换完成后p索引自加1

复杂度:

  1. 时间复杂度:O(n)O(n)
  2. 空间复杂度:无需额外数据空间,O(1)O(1)

代码:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for index, val in enumerate(nums):
            if val == 0:
                break
        p = q = index
        while q < len(nums):
            if nums[q] != 0 and p!=q:
                nums[p] = nums[q]
                nums[q] = 0
                p += 1
            q += 1  

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!