移动零
问题的两个要求是:
- 将所有 0 移动到数组末尾。
- 所有非零元素必须保持其原始顺序。
这里很好地认识到这两个需求是相互排斥的,也就是说,你可以解决单独的子问题,然后将它们组合在一起以得到最终的解决方案。
方法:
- 一个指针
i
从前到后遍历数组,每当遇到非0数时,令nums[cur] = nums[i]; cur++;
,cur
是另一个指针(从0开始),记录当前位置。 - 当
i
遍历完后,此时cur
指向的位置到数组的末尾全赋为0即可。
1 | class Solution { |
复杂度
- 时间复杂度:O(n)。
- 空间复杂度:O(1)。