1.给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非 零元素的相对顺序。
2.请注意 ,必须在不复制数组的情况下原地对数组进行操作。
解法一:使用i遍历数组,使用j标记数组下一个位置(存放在遍历后面的时候不等于0的数字值,并且将此位置赋值为0)
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]; if(i != j) { nums[i] = 0 ; } j++; } } } }
3.解法二:遍历非零数据,将非零数据放到前面,之后从j++开始补0;
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]; } } for(int i = j ; i < nums.length ; i++) { nums[i] = 0; } } }
4.区别:两者都是将数组进行遍历查询非零数据,区别在于一个是直接将0补上,另一个是直接在最后一次补全。