题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 注意:必须在不复制数组的情况下原地对数组进行操作。
示例:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
解题思路:
通过题目描述可以知道此题可以使用双指针来做,控制一个left的指针,和一个right的指针,left代表的是正常数字的大小,数组长度 - right则代表0的数量。 边界值处理: 当left == right时,我们应该中止循环。因为此时的位置已经全部移动完毕。
具体实现:
class Solution {
public void moveZeroes(int[] nums) {
int left = 0, right = nums.length - 1;
while(left < right){
if(nums[left] == 0){
// 数组向前移动\
int target = 0;
for(int i = left; i < right;i++){
nums[i] = nums[i+1];
}
nums[right] = 0;
right--;
}else{
left++;
}
}
}
}