力扣283:移动零(JAVA)

题目描述:

力扣283:移动零(JAVA)_第1张图片

意思是将所有0移到最后的同时其余非0元素位置仍然不变

如  1 2 0 5 2 0 经过移动零后变为 1 2 5 2 0 0

思路:使用双指针的思路来写

fast:从左往右遍历数组

slow:非零元素最后的一个位置

将数组分为3个区间

[0,slow]为处理好的非0数据,slow永远指向最后一个非0数据
[slow+1,fast]处理好的为0的数据
[fast+t,arr.length-1]为待处理的数据

力扣283:移动零(JAVA)_第2张图片

做法:

1.fast遇到0元素:fast++

2.fast遇到非0元素:slow++,然后交换数据,最后fast++

    public void moveZeroes(int[] nums) {
        int fast = 0;
        int slow = -1;
        for(fast = 0; fast < nums.length; fast++){
            if(nums[fast] != 0){
                slow++;
                // 交换数据
                int tmp = nums[slow];
                nums[slow] = nums[fast];
                nums[fast] = tmp;
            }
        }
    }

力扣283:移动零(JAVA)_第3张图片

你可能感兴趣的:(leetcode,算法,职场和发展)