题目:给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。
输入:nums = [0,1,0,3,12]
输出:[1, 3, 12, 0, 0]
方法一:双指针
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size(), left = 0, right = 0;
while (right < n) {
if (nums[right]) {
swap(nums[left], nums[right]);
left++;
}
right++;
}
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)