📅  最后修改于: 2023-12-03 15:14:25.947000             🧑  作者: Mango
在C++中,给定一个整数数组nums
,编写一个函数来移动所有0的元素到它们的数组末尾,同时保持非零元素的相对顺序。
示例:
输入:nums = [0,1,0,3,12]
输出:[1,3,12,0,0]
遍历数组,用一个指针来记录非零元素需要插入的位置,将非零元素依次放在该位置上,最后在指针位置后面补0即可。
pos
来记录非零元素需要插入的位置,初始化为0。nums[pos]
的位置上,并将指针pos
加1。pos
的位置后面补0。代码实现如下:
void moveZeroes(vector<int>& nums) {
int pos = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[pos++] = nums[i];
}
}
while (pos < nums.size()) {
nums[pos++] = 0;
}
}
时间复杂度:O(n),其中n为数组的长度,需要遍历一次整个数组。
空间复杂度:O(1),只需要常数空间来记录指针和临时变量。
本题测试用例涵盖了数组中有0和无0两种情况。
| 输入 | 输出 | | --------- | --------- | | [0,1,0,3,12] | [1,3,12,0,0] | | [0,0,0] | [0,0,0] | | [1,2,3,4,5] | [1,2,3,4,5] | | [0,0,1,0,1,0,1] | [1,1,1,0,0,0,0] |
本题是一道数组题目,需要用指针来记录操作的位置,操练对数组操作的细节。