MoveZero

  • 2022-12-14
  • 浏览 (567)

MoveZero.java 源码

package datastructure.array.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * @author roseduan
 * @time 2020/9/7 7:37 下午
 * @description 移动零
 */
public class MoveZero {

    /**
     * 第一种解法:一个指针i记录当前所填充的位置,另一个指针j查找不为0的元素
     * 运行结果:通过,速度击败 100%
     */
    public void moveZeroes1(int[] nums) {
        if (nums == null || nums.length == 0){
            return;
        }

        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != 0){
                nums[i++] = nums[j];
            }
        }

        for (; i < nums.length; i++){
            nums[i] = 0;
        }
    }

    /**
     * 第二种解法:和第一种类似,只是避免了最后一个for循环去填充0,代码更简洁
     * 运行结果:通过,速度击败 100%
     */
    public void moveZero2(int[] nums){
        if (nums == null || nums.length == 0){
            return;
        }

        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != 0){
                nums[i] = nums[j];
                if (i != j){
                    nums[j] = 0;
                }
                i++;
            }
        }
    }

    /**
     * 第三种解法:查找0并交换
     * 运行结果:通过,速度击败 100%
     */
    public void moveZero3(int[] nums){
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != 0){
                int temp = nums[j];
                nums[j] = nums[i];
                nums[i] = temp;
                i++;
            }
        }
    }

    /**
     * 第四种解法:开辟一个新的数组,遍历旧数组,将不为0的数据暂存,然后再遍历新数组写回
     * 运行结果:通过,速度击败 26%
     */
    public void moveZero4(int[] nums){
        if (nums == null || nums.length == 0){
            return;
        }

        List<Integer> list = new ArrayList<>();
        for (int num : nums) {
            if (num != 0) {
                list.add(num);
            }
        }

        for (int i = 0; i < nums.length; i++) {
            nums[i] = i < list.size() ? list.get(i) : 0;
        }
    }
}

你可能感兴趣的文章

BestTimeBuySellStock

BestTimeBuySellStockII

BullsAndCows

0  赞