题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。
- 尽量减少操作次数。
解题:
方法一:双指针(lc官方的解法)
python解法
class Solution: def moveZeroes(self, nums: List[int]) -> None: n = len(nums) left = right = 0 while right < n: if nums[right] != 0: nums[left], nums[right] = nums[right], nums[left] left += 1 right += 1
C++解法
class Solution { public: void moveZeroes(vector<int>& nums) { int left=0,right=0; while(right<nums.size()){ if(nums[right]!=0){ swap(nums[left],nums[right]); left++; } right++; } } };
方法二:可以在其他数组上操作的情况下
python解法
class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ rt = [] zero_num = 0 for num in nums: if num!=0: rt.append(num) else: zero_num+=1 nums[:] = rt+[0]*zero_num
这样子运行时间少,但是占用内存大