问题
实现思路
首先, 将dest指向-1 位置, cur指向下标为0 的位置, 在cur遍历的过程中:
1) 遇到非零元素则与下标dest+1 位置的元素交换,
2) 若遇到零元素则只继续cur遍历.
下标为1 的位置上是 非零元素 执行1) 交换得到右图结果 随后cur++ 得到下图结果
下标为2 的位置上是零元素 执行2)
下标为3 的位置上是非零元素 执行1) 交换得到右图结果 随后cur++ 得到下图结果
下标为4 的位置上是非零元素, 执行1) 交换得到右图结果
遍历结束, 实现要求
代码:
class Solution {
public void moveZeroes(int[] nums) {
int cur = 0, dest = -1;
while(cur < nums.length) {
if(nums[cur] == 0) {
cur++;
} else {
swap(nums, cur, dest+1);
cur++;
dest++;
}
}
}
public void swap(int[] nums, int left, int right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
return;
}
}
提交结果: