返回

纵观LeetCode 283:化繁为简,逐个移动零

Android

导语

LeetCode 283: 移动零 是一道经典的数组操作题,旨在考验算法的巧妙性与实现的简洁性。在这篇探讨中,我们将深入研究这个问题,提供逐步的解决思路以及多种语言的範例代码。希望能够帮助您更轻松地理解並實作此題目。

算法概要

这題的解決方案基于双指针法,即使用两个指针i和j来遍历数组。指针i用来遍历整个数组,而指针j则用来找到第一个非零元素的位置。当i不指向非零元素时,j保持不变。当i指向非零元素时,则交换i和j指向的元素,并让j加一。如此循环下去,直到i指向数组末尾。

Python 实现

def move_zeroes(nums):
    """
    Move all zeroes to the end of the array while maintaining the relative order of non-zero elements.

    Args:
    nums: List[int]

    Returns:
    None
    """
    i = 0
    for j in range(len(nums)):
        if nums[j] != 0:
            nums[i], nums[j] = nums[j], nums[i]
            i += 1

C++ 实现

void moveZeroes(vector<int>& nums) {
    int i = 0;
    for (int j = 0; j < nums.size(); j++) {
        if (nums[j] != 0) {
            swap(nums[i], nums[j]);
            i++;
        }
    }
}

Java 实现

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

结语

至此,我們已經介紹了 LeetCode 283 的解決思路和範例代碼。透過雙指針法,我們可以有效率地將數組中的零移到尾端,同時保持非零元素的順序不變。若您對於此演算法的實作有進一步的問題或想法,歡迎隨時提出,讓我們一起討論,共同進步。