https://leetcode-cn.com/problems/move-zeroes/
1、官方题解——双指针
使用双指针,左指针指向当前已经处理好的序列(非0序列)的尾部,右指针指向待处理序列的头部。
右指针返回0,则右指针右移;
右指针返回非0,则左右指针指向的值交换位置,左右指针都右移。
class Solution{
public void moveZeroes(int[] nums){
int n = nums.length, left=0, right=0;
while(right<n){
if(nums[right] != 0){
swap(nums, left, right);
left++;
}
right++;
}
}
public void swap(int[] nums, int left, int right){
int temp = nums[left];
int nums[left]= nums[right];
int nums[right] = temp;
}
}
2、比较容易想到的一种做法
class Solution {
public void moveZeroes(int[] nums) {
int j=0;
for(int i=0; i<nums.length; i++){
if(nums[i] != 0){
nums[j] = nums[i];
j++;
}
}
for(;j<nums.length; j++){
nums[j] = 0;
}
}
}