给定一个数组,请你实现将所有 0 移动到数组末尾并且不改变其他数字的相对顺序。
数据范围:数组长度满足
,数组中的元素满足 ![](https://www.nowcoder.com/equation?tex=1%20%5Cle%20val%20%5Cle%201000%20%5C)
public int[] moveZeroes (int[] nums) { int noEqualZeroIndex = -1; for (int curIndex = 0; curIndex < nums.length; curIndex++) { if(nums[curIndex] != 0) { swap(nums, ++noEqualZeroIndex, curIndex); } } return nums; } private void swap(int[] nums, int i1, int i2) { if (i1 == i2) { return; } nums[i1] ^= nums[i2]; nums[i2] ^= nums[i1]; nums[i1] ^= nums[i2]; }
import java.util.*; public class Solution { public int[] moveZeroes (int[] nums) { int n = nums.length; int lastNotZero = -1; // 从后往前,进行覆盖 for (int i = 0; i < n; i++) { if (nums[i] != 0) { nums[++lastNotZero] = nums[i]; } } for (int i = lastNotZero + 1; i < n; i++) { nums[i] = 0; } return nums; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型一维数组 */ public int[] moveZeroes (int[] nums) { int n = nums.length; int l = 0; int r = 0; for (int i = 0; i < n; i ++) { if (nums[i] == 0) { r ++; } else { int temp = nums[l]; nums[l] = nums[r]; nums[r] = temp; l ++; r ++; } } return nums; } }
public int[] moveZeroes (int[] nums) { // write code here int zero_count = 0; //记录0出现的次数 int res[] = new int[nums.length]; //创建最终的数据存放最终的数据 int k = 0; for(int i : nums){ if(i == 0){ zero_count ++; }else{ res[k++] = i; } } if(zero_count == 0){ return nums; } //将剩下的几个0 都存放到数组最后 for(int i = nums.length - zero_count ; i < nums.length ; i ++){ res[i] = 0; } return res; }
public int[] moveZeroes (int[] nums) { // write code here int[] number = new int[nums.length]; Queue<Integer> queue = new LinkedList<>(); Queue<Integer> Zeroqueue = new LinkedList<>(); int a = 0; for (int num : nums) { if (num!=0){ number[a] = num; a++; } else { Zeroqueue.add(num); } } int num1 = Zeroqueue.size(); for (int i = 0; i <num1 ; i++) { number[i+a] = Zeroqueue.poll(); } return number; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型一维数组 */ public int[] moveZeroes (int[] nums) { // write code here int left = 0, right = 0; while(left < nums.length && right < nums.length){ if(nums[left] != 0){ left ++; }else { right = left + 1; while(right < nums.length && nums[right] == 0){ right ++; } if(right < nums.length && nums[right] != 0){ swap(nums, left++, right); } } } return nums; } private void swap(int[] arr, int i, int j) { if(i != j){ arr[i] = arr[i] ^ arr[j]; arr[j] = arr[i] ^ arr[j]; arr[i] = arr[i] ^ arr[j]; } } }
import java.util.*; public class Solution { public static int[] moveZeroes (int[] nums) { List<Integer> list=new ArrayList<>(); for (int i = 0; i < nums.length; i++) { if(nums[i]!=0) list.add(nums[i]); } int s=list.size(); for (int i = 0; i < (nums.length-s); i++) { list.add(0); } return list.stream().mapToInt(Integer::valueOf).toArray(); } }