一、题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
二、解题思路
使用双指针, 声明两个指针i
和j
,一个寻找0元素,一个寻找非0元素,然后做交换即可。
第一步:初始化指针,指针i首先向后移动寻找非0元素:
第二步:i
和j
指针对应的元素值交换,并且i
和j
都向后移动一位:
依次类推,知道最后的元素遍历玩为止。这种双指针方法又称为快慢指针。吧
三、代码演示
class Solution {
public void moveZeroes(int[] nums) {
//特判
if (nums.length==0) {
return;
}
int slow = 0;
for (int fast=0; fast< nums.length; fast++){
if (nums[fast] != 0){
//交换fast和slow指向的元素
int tmp = nums[fast];
nums[fast] = nums[slow];
nums[slow] = tmp;
slow++;
}
}
}
}