题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明:
必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/move-zeroes 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 这道题解法很多. 比如先把非0的都放到前面.后面的补0 或者更简洁.不补0.双指针,在遍历过程中.两个变量.慢指针原地不动.快指针向前遍历,发现非0就把值传给慢指针.同时快指针变0.然后快慢指针继续向前. 代码
class Solution {
public void moveZeroes(int[] nums
) {
int j
= 0;
for(int i
= 0;i
< nums
.length
;i
++) {
if (nums
[i
] != 0 && i
!= j
) {
nums
[j
++] = nums
[i
];
nums
[i
] = 0;
} else if (nums
[i
] != 0 && i
== j
){
j
++;
}
}
}
}