leetcode 283. 移动零
问题描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size(),slow = 0,fast = 0,i,tmp;
if(n < 2)return;
while(fast < n)
{
if(nums[fast] != 0)
{
nums[slow] = nums[fast];
slow++;
}
fast++;
}
while(slow<n)
{
nums[slow++] = 0;
}
}
};
结果:
执行用时 :8 ms, 在所有 C++ 提交中击败了82.08%的用户
内存消耗 :10.3 MB, 在所有 C++ 提交中击败了5.43%的用户
或者更简洁的写法:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size(),slow,fast;
if(n < 2)return;
for(slow = 0,fast = 0;fast < n; ++fast)
{
if(nums[fast] != 0)
swap(nums[slow++],nums[fast]);
}
}
};
结果:
执行用时 :8 ms, 在所有 C++ 提交中击败了82.08%的用户
内存消耗 :10.3 MB, 在所有 C++ 提交中击败了5.43%的用户