题意:题意:给定一个数组,将数组中的0都移动到数组尾部,保持其他元素顺序不变
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].难度:Easy
思路:设置一个int类型的count来统计数组中0的个数,对数组进行一次遍历,如果当前元素不为0,则需要判断count是否为0,count不为0说明该元素前面有0元素,需要交换位置
代码:
public void moveZeroes(int[] nums) { if(nums.length == 0){ return; } int len = nums.length; int count = 0; for(int i = 0; i < len; i++){ if(nums[i] == 0){ count++; // i = i + count; }else{ if(count != 0){ nums[i-count] = nums[i]; nums[i] = 0; } } } }
来自”Solutions”里的方法
思路:设置一个非0元素的插入位置,如果当前元素不为0,就插入到该位置上,并且insertPos加1,将非0元素都按照之前的顺序存入数组之后,剩下的元素都用0填充
代码:
public void moveZeroes1(int[] nums) { if (nums == null || nums.length == 0) return; int insertPos = 0; for (int num: nums) { if (num != 0) nums[insertPos++] = num; } while (insertPos < nums.length) { nums[insertPos++] = 0; } }