返回
纵观LeetCode 283:化繁为简,逐个移动零
Android
2023-12-06 09:14:57
导语
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 的解決思路和範例代碼。透過雙指針法,我們可以有效率地將數組中的零移到尾端,同時保持非零元素的順序不變。若您對於此演算法的實作有進一步的問題或想法,歡迎隨時提出,讓我們一起討論,共同進步。