题目要求
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 10(4)
-2(31) <= nums[i] <= 2(31) - 1
解题思路
解法1
类似冒泡排序的原理,相信大家应该都会冒泡吧,不过是把判断条件从比大小改成了判0,内存大一些,但时间短
解法2
利用栈操作,把0出入栈操作一次,内存占用小,但时间比较长
代码实现
解法1
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
# for i in range(nums.count(0)):
# nums.remove(0)
# nums.append(0)
j = 0
for i in range(len(nums)):
if nums[i]:
nums[j], nums[i] = nums[i], nums[j]
j += 1
解法2
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0)