难度:简单
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
我的想法:
1.start指向数组第一位,end指向数组最后一位;
2.如果start指向的这位为0,pop掉这位上的0,数组后面append这个0。start不变,end向前移;
3.如果start指向的这位不是0,start后移一位;
4.循环,直到start和end相遇。
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
start = 0
end = len(nums) - 1
while start <= end:
if nums[start] == 0:
nums.append(nums.pop(start))
end -= 1
else:
start += 1
跑完之后
执行用时:284 ms, 在所有 Python3 提交中击败了20.74%的用户
内存消耗:15.6 MB, 在所有 Python3 提交中击败了19.27%的用户
这用时和耗时直接给我干自闭了。
看了下别人的题解,用的双指针:
感觉好牛逼啊,虽然我还写不出来,先挂这,等下次刷到的时候再搞。