给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
/*
* 移动零
* 非0左移,最后补0
* */
/*public void moveZeroes(int[] nums) {
int slow = 0;
for (int i =0;i<nums.length;i++){
if (nums[i]!=0){
nums[slow++]=nums[i];
}
}
for (int j=slow;j< nums.length;j++){
nums[j]=0;
}
}*/
/*
* 方法二 双指针 非0数跟上一个交换、0不动
* */
public void moveZeroes(int[] nums) {
int length = nums.length,left=0,right=0;
while(right<length){
if (nums[right]!=0){
swap(nums,left,right);
left++;
}
right++;
}
}
public void swap(int[] nums,int left,int right){
int temp = nums[left];
nums[left]=nums[right];
nums[right] = temp;
}