题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
思路
双指针
一个快指针
一个慢指针
循环遍历数组
终止条件为快慢指针,都到达数组末尾为止。
快指针先到达,
满指针随后到达。
在移动过程中,快指针,如果是 非0, 快指针,移动,同时慢指针移动
如果是 0, 快指针继续移动
慢指针不移动。
知道快指针移动到最后。
然后,慢指针,开始移动,移动到最后。
Loop through array
The termination condition is the fast and slow pointers until they reach the end of the array.
Come on, the first pointer arrives first,the slow pointer then arrives.
In the process of moving, the fast pointer. If it is non-0, the fast pointer moves and the slow pointer moves at the same time
If it is 0, the fast pointer continues to move
Slow pointer does not move.
fast the pointer moves to the end.
Then, the slow pointer, start moving, and move to the end.
代码
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != 0){
nums[j++] = nums[i];
}
}
while (j < nums.length) {
nums[j++] = 0;
}
}
}
Reference
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2ba4i/