原地操作数组:移动零问题的多语言解决方案
摘要
本文将介绍如何使用不同编程语言解决“移动零”问题,即将数组中的所有零移动到数组末尾,同时保持非零元素的相对顺序。我们将探索几种不同的算法实现,并提供 Python、Java 和 C++ 的代码示例。
1. 问题描述
给定一个数组 nums
,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。必须在不复制数组的情况下原地对数组进行操作。
2. 输入和输出格式
- 输入:整数数组
nums
- 输出:原地修改后的数组,所有零位于末尾
3. 示例
- 示例 1:
nums = [0,1,0,3,12]
输出:[1,3,12,0,0]
- 示例 2:
nums = [0]
输出:[0]
4. 约束条件
1 <= nums.length <= 10^4
-2^31 <= nums[i] <= 2^31 - 1
5. 算法分析
- 双指针法:使用两个指针,一个指向非零元素应该放置的位置,另一个遍历数组。
- 计数法:先统计非零元素的数量,然后从后向前填充零。
6. 多语言实现
我们将使用 Python、Java 和 C++ 来实现双指针法。
Python 实现
def moveZeroes(nums):
insert_pos = 0 # 非零元素的插入位置
for num in nums:
if num != 0:
nums[insert_pos] = num
insert_pos += 1
for i in range(insert_pos, len(nums)):
nums[i] = 0
# 示例
nums1 = [0,1,0,3,