1.题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。
2.答案
class Solution {
public void moveZeroes(int[] nums) {
int i=0;
//将所有非零的数全部放在数组前面,数组后面的数全部设为0
for(int j=0;j<nums.length;j++){
if(nums[j]!=0){
int temp = nums[j]; //先将nums[j]的值存储起来
nums[j]=0; //将原来j位置处的值设为0,这是为了减少操作次数
nums[i++]=temp; //然后将原nums[j]值,放在数组前边
//ps:不能先将nums[j]放在i处,然后将nums[j]设为0。
// 因为如果nums[j]放置的位置就在原位置,最后又把它设为0了,这就错了
}
}
}
}