Skip to content

283. Move Zeroes

题目

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

Note that you must do this in-place without making a copy of the array.

 

Example 1:

Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]

Example 2:

Input: nums = [0]
Output: [0]

 

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

 

Follow up: Could you minimize the total number of operations done?
Related Topics
  • 数组
  • 双指针

  • 👍 2653
  • 👎 0
  • 思路

    解法

    py
    # leetcode submit region begin(Prohibit modification and deletion)
    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            if len(nums)  == 1:
                return
    
            zero = 0
            for i in range(len(nums)):
                if nums[i] == 0:
                    zero += 1
                else:
                    nums[i - zero] = nums[i]
    
            for i in range(zero):
                nums[-(i + 1)] = 0
    
            
    # leetcode submit region end(Prohibit modification and deletion)

    复杂度分析

    • 时间复杂度O(N)
    • 空间复杂度O(1)