移动零(力扣283题)
题目:给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
/**
* 题解:将所有0移动到数组末尾,可以理解成将数组中的所有0移除掉,然后将后面的元素赋值为0.
*/
class Solution {
public void moveZeroes(int[] nums) {
//得到移除0以后数组中的非0数的长度
int newNumsLength = removeZeros(nums, 0);
//再把后面的数置为0
for (int i = newNumsLength ; i < nums.length; i++) {
nums[i] = 0;
}
}
public int removeZeros(int[] nums, int val) {
int fast = 0;
int slow = 0;
while (fast < nums.length) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
}