题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
1 | 输入: [0,1,0,3,12] |
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
题解
一次遍历
我们使用两个指针i
和j
,只要nums[i]!=0
,我们就交换nums[i]
和nums[j]
1 | public void moveZeroes(int[] nums) { |
二次遍历
我们创建两个指针i
和j
,第一次遍历的时候指针j
用来记录当前有多少非0
元素。即遍历的时候每遇到一个非0
元素就将其往数组左边挪,第一次遍历完后,j
指针的下标就指向了最后一个非0
元素下标。
第二次遍历的时候,起始位置就从j
开始到结束,将剩下的这段区域内的元素全部置为0
。
1 | public void moveZeroes(int[] nums) { |