> Problem: [283. 移动零]
[TOC]
# 思路
> 没啥思路,就感觉就简简单单,想一下,给你一个数组,则只需要把非0的移到前面,具体看解题方法。
# 解题方法
> 给你一个数组,[1,2,0,5,0,0,0,9];这么一个数组,接下来模拟一下我的做题思路,使用双指针法,两个指针,都从数组的第一位开始,一个指针设为star,一个设为end,
如果两个指针指向的都是非0数,则两个都向后移动一位
如果star指向0,end也指向0,则end向后移动一位
如果star指向0,end指向非0数,则star指向的数替换为end指向的数,
只有上面三种情况,结束条件为star到达数组的最大长度。
最后使用把star后面指向的数全部替换成0,包含star'此时指向的数。
# 复杂度
- 时间复杂度:
> 添加时间复杂度, 示例: $O(n)$
- 空间复杂度:
> 添加空间复杂度, 示例: $O(n)$
# Code
```Java []
class Solution {
public void moveZeroes(int[] nums) {
int star= 0;
int end = 0;
int len = nums.length;
while (end < nums.length){
int x = nums[star];
int y = nums[end];
if (y == 0){
end++;
continue;
}
if (y != 0 && y != x){
nums[star] = nums[end];
star++;
end++;
continue;
}
star++;
end++;
}
while (star < len){
nums[star] = 0;
star++;
}
}
}
```