[LeetCode Hot] LeetCode283. 移动零

发布时间 2023-12-02 10:28:02作者: Ac_c0mpany丶

题目描述

方法一:时间复杂度O(n2)

class Solution {
    public void moveZeroes(int[] nums) {
        for (int i = 0; i < nums.length; i ++) {
            // 指针i为0的时候停止
            if (nums[i] == 0) {
                // 遍历[i + 1, nums.length - 1],如果遇到nums[j] != 0,就交换两个位置的元素值
                for (int j = i + 1; j < nums.length; j ++) {
                    if (nums[j] != 0) {
                        int temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                        break;
                    }
                }
            }
        }
    }
}

方法二:双指针,时间复杂度O(n)

class Solution {
    public void moveZeroes(int[] nums) {
        // 定义两个指针i和j
        // j以及j左边用来保存非0元素
        int j = 0;
        for (int i = 0; i < nums.length; i ++) {
            // 如果nums[i]为非零元素,则将其交换给j,j向后移动一位
            if (nums[i] != 0) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j++] = temp;
            }
        }
    }
}