给定一个数组,请你实现将所有 0 移动到数组末尾并且不改变其他数字的相对顺序。
数据范围:数组长度满足 ,数组中的元素满足
public int[] moveZeroes (int[] nums) { int j = 0; //指针i遍历数组,如果i遍历到的数不是0,则将该数移动到j位置上,同时j右移 for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { nums[j++] = nums[i]; } } //i遍历结束时,j的大小就是非零元素的个数,指向最后一个非零元素的后一个位置。后面的元素置0 while (j < nums.length) { nums[j++] = 0; } return nums; }
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]; } } }
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 { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型一维数组 */ public int[] moveZeroes (int[] nums) { // write code here ArrayList<Integer> list1=new ArrayList<>(); ArrayList<Integer> list2=new ArrayList<>(); for(int i=0;i<nums.length;i++){ if(nums[i]!=0){ list1.add(nums[i]); }else{ list2.add(nums[i]); } } for(int i=0;i<list2.size();i++){ list1.add(list2.get(i)); } int arr[]=new int[list1.size()]; for(int i=0;i<arr.length;i++){ arr[i]=list1.get(i); } return arr; } }
class Solution { public: vector<int> moveZeroes(vector<int>& nums) { int zero_pos = -1; for (int i = 0; i < nums.size(); i++) { if (nums[i] == 0 && zero_pos == -1) { zero_pos = i; } if (zero_pos != -1 && nums[i] != 0) { swap(nums[zero_pos], nums[i]); zero_pos++; } } return nums; } };
public int[] moveZeroes (int[] nums) { for (int i = 0, j = 0; i < nums.length && j < nums.length; ) { if (nums[i] != 0) { i++; } else { if (j <= i) { j = i + 1; } for (; j < nums.length; j++) { if (nums[j] != 0) { nums[i] = nums[j]; nums[j++] = 0; break; } } } } return nums; }
package main import _"fmt" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型一维数组 */ func moveZeroes( nums []int ) []int { for i,x:=range nums{ if x==0{ for j:=i+1;j<len(nums);j++{ if nums[j]!=0{ nums[i],nums[j]=nums[j],nums[i] break } } } } return nums }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ int* moveZeroes(int* nums, int numsLen, int* returnSize ) { // write code here int *ans=(int *)malloc(sizeof(int)*2000); *returnSize=numsLen; int k=0; //int j=numsLen; int i=0; for(k=0;k<numsLen;k++){ if(nums[k]!=0){ ans[i++]=nums[k]; } } for(int j=i;j<numsLen;j++) ans[j]=0; // for(k=0;k<numsLen;k++){ // if(nums[k]==0){ // ans[j++]=0; // } // else{ // ans[i++]=nums[k]; // } // } // memmove(ans+i, ans+numsLen,(j-numsLen)*sizeof(int)); return ans; }
class Solution: def moveZeroes(self , nums: List[int]) -> List[int]: if len(nums) == 0: return None j = 0 # j 作为慢指针,用来在第一次遍历数组时(i向后移动时)来给非零元素赋值。每当i指针所指 # 元素非0,则将其赋值给j所指位置,j后移1位 for i in range(len(nums)): if nums[i] != 0: nums[j] = nums[i] j += 1 # j目前所指位置开始往后都赋0即可 for k in range(j, len(nums)): nums[k] = 0 return nums
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; } }