力扣简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;
            }
        }
    }

 

posted @ 2023-03-01 09:58  Ssshiny  阅读(23)  评论(0)    收藏  举报