LeetCode.283 移动零

发布时间 2023-08-27 16:31:42作者: 晓枫的春天

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
https://leetcode.cn/problems/move-zeroes/description/
 
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

双指针挪动

Python 实现

def moveZeroes(nums: List[int]):
    '''
    移动 0
    :param nums:
    :return:
    '''
    #非0往前移动
    index = 0
    for num in nums:
        if num != 0:
            nums[index] = num
            index += 1
    #末尾补0
    for i in range(index, len(nums)):
        nums[i] = 0
    return nums

Java 实现

    /**
     * LC 283 移动 0--双指针挪动法
     * @param nums
     */
    public static void moveZeroes(int[] nums) {
        int index = 0;
        for (int n : nums) {
            if (n != 0) {
                nums[index++] = n;
            }
        }
        for (int i = index; i < nums.length; i++) {
            nums[i] = 0;
        }
    }

双指针交换法

Python 实现

def moveZeroes1(nums: List[int]):
    left, right = 0, 0
    while right < len(nums):
        if nums[right] != 0:
            nums[right], nums[left] = nums[left], nums[right]
            left += 1
        right += 1
    return nums

Java 实现

    public static void moveZeroes1(int[] nums) {
        int left = 0, right = 0, temp = 0;
        while (right < nums.length) {
            if (nums[right] != 0) {
                temp = nums[right];
                nums[right] = nums[left];
                nums[left] = temp;
                left++;
            }
            right++;
        }
    }