题目:
题解
题解:第一遍循环先把nums[i]值不是0的装到一个集合里面,题目要求需要在原数组上操作,因为原数组最坏的可能是一个0都没有,所以完全满足题意,把不等于0的值按秩序依次放到nums[j]中,放完j++,也可以写成nums[j++]。第一遍循环完,原数组的长度减去重新放值的长度i-j就是有多少个0,再从j到i循环在最后面补充0。需要第一遍知道这种解法下次要能独立写出来。
代码
public static void moveZeroes(int[] nums) {
//第一遍只要是非0的统统都赋给nums[j]
int j=0;
for (int num : nums) {
if(num!=0){
nums[j]=num;
j++;
}
}
//替换后面的末尾的元素都赋为0即可从i-j是多少就需要在结尾补充多少个0
for(int i=j;i<nums.length;i++){
nums[i]=0;
}
}
备注
本文正在参与「掘金 2021 春招闯关活动」, 点击查看。