
一道简单的原地题目,指直接在给定的数组上修改数值求解,不要复制到新的数组。
- 思路:解题思路
定义一个慢指针slow,初始化为0,表示非零元素的位置。
定义一个快指针fast,初始化为0,表示遍历数组的位置。
使用一个循环,从头到尾遍历数组nums。
在循环中,如果快指针指向的元素不等于0,就将它赋值给慢指针指向的位置,然后将慢指针向后移动一位。
在循环结束后,将慢指针后面的所有元素都置为0。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
# dual p
sp=0
fp=0
l=len(nums)
# n=0
# for i in range(len(nums)):
while fp<l:
#注意下面两个while也要判断fp是否小于l, 否则会产生数组越界的问题
while fp<l and nums[fp]==0:
fp+=1
# n+=1
while fp<l and nums[fp]!=0:
nums[sp]=nums[fp]
sp+=1
fp+=1
while sp<l:
nums[sp]=0
sp+=1
return nums

网友评论