/*
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
思路1:
1.统计0的个数,然后遍历数组,遇到非0的就移动到左边,剩下的位置全部置为0
思路2:
1.做一次循环,遍历数组
2.开一个index下标,记录当前非0元素的位置
3.遇到一个非0元素(i),就把他放到记录的index的位置
4.把i位置的元素置为0,并且j++
*/
/*** 思路2:* * 1.做一次循环,遍历数组* * 2.开一个index下标,记录当前非0元素的位置* * 3.遇到一个非0元素(i),就把他放到记录的index的位置* * 4.把i位置的元素置为0,并且j++* @param nums*/public void moveZeroes2(int[] nums) {int j = 0;for(int i = 0; i < nums.length; i++){if(nums[i] != 0){nums[j] = nums[i];// 当两个index不相等的时候,才赋值为0,否则有可能第一个位置不是0,结果直接赋值一个0// 比如:[1,0,2,0,4,5],假如不做判断,那么第一个位置就直接为0了,是错的if (i != j){nums[i] = 0;}j++;}}}/*** 思路3:* * 1.做一次循环,遍历数组* * 2.开一个index下标,记录当前非0元素的位置* * 3.遇到一个非0元素,就把它和记录到的j做位置交换* @param nums*/public void moveZeroes3(int[] nums) {int j = 0;for(int i = 0; i < nums.length; i++){// 当遇到不为0的,就把j和i位置的元素做交换if(nums[i] != 0){int tmp = nums[i];nums[i] = nums[j];// j++先取数,再自增nums[j++] = tmp;}}}
