📅  最后修改于: 2023-12-03 15:22:21.730000             🧑  作者: Mango
在处理数组时,有时需要将所有的零移动到数组的末尾,而保持非零元素的相对顺序不变。一种常用的方法是使用两个指针,一个指向当前最后一个非零元素的位置,另一个指向当前处理到的元素的位置,遍历整个数组,将非零元素都移动到前面,空出的位置填充零。
这种方法的时间复杂度是O(n),其中n是数组的长度。由于该算法只需遍历一次数组,因此它是一种高效的解决方案。
以下是使用C++实现的代码片段:
void moveZeroes(vector<int>& nums) {
int lastNonZeroIndex = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[lastNonZeroIndex++] = nums[i];
}
}
for (int i = lastNonZeroIndex; i < nums.size(); i++) {
nums[i] = 0;
}
}
在这个例子中,我们利用了一个变量lastNonZeroIndex来记录数组中当前最后一个非零元素的位置。我们遍历整个数组,如果当前元素不为零,则将其移动到lastNonZeroIndex的位置。
最后,我们将数组的剩余部分填充为零。这个循环处理的是所有剩下的位置,因为所有的非零元素已经被移动到前面。
使用两个指针来将数组中的所有零移动到末尾是一种高效的解决方法。我们可以遍历整个数组,将非零元素移动到前面,然后使用剩余的位置填充零。这种方法的时间复杂度为O(n),其中n是数组的长度。
使用C++语言实现的示例代码片段如下:
void moveZeroes(vector<int>& nums) {
// Your code here
}