描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
解法一:
将所有非零的元素移动到数组的开头,并记录所有非零的个数。然后填充0的个数。
public void moveZeroes1(int[] nums){
int index = 0;
for(int i : nums){ // 移动非零元素
if(i != 0){
nums[index++] = i;
}
}
while(index <nums.length){ // 填充0
nums[index++]=0;
}
}
解法二:
设置一个指针指向当前元素序列中的第一个0的位置,当发现非零元素时与其交换位置。
public void moveZeroes2(int[] nums){
for(int last = 0, cur = 0; cur<nums.length; cur++){
if(nums[cur] != 0){
int temp = nums[cur];
nums[cur] = nums[last];
nums[last] = temp;
last++;
}
}
}