力扣简283 移动0
五分钟 内存占用大

package Leetcode; /*给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾, * 同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。*/ public class Leetcode283 { public static void main(String[] args) { // TODO Auto-generated method stub int[] test= {0}; Leetcode283.moveZeroes(test); for(int i:test) { System.out.println(i); } } public static void moveZeroes(int[] nums) { int count=0;//计数换到指定位置的数 int size=nums.length; for(int i=0;i<size;i++) { if(nums[i]!=0) { nums[count++]=nums[i]; } } for(;count<size;count++) { nums[count]=0; } } }
题解双指针思路2:
一个标记要换到的位置 一个找非0数 然后直接与对应位置交换

最开始为了节省temp 直接用0替换 没有存值 导致单个非零元素被二次覆盖为0出错
public static void moveZeroes(int[] nums) { int loc=0;//0的位置 //只有一个元素时覆盖错了 for(int find=0;find<nums.length;find++) {//find 要移动的非零 if(nums[find]!=0) { int temp = nums[loc]; nums[loc++]=nums[find]; nums[find]=temp; } } }

浙公网安备 33010602011771号