双指针,用一个索引nonZeroEnd标识当前非0元素的末尾的下一元素,用另一个索引i遍历整个数组
如果当前元素是0,那么不做处理;否则,将nums[nonZeroEnd]与nums[i]交换,并将nonZeroEnd+1。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int nonZeroEnd = 0;
for(int i = 0;i<nums.size();++i)
{
if(nums[i] == 0)
{
continue;
}
else
{
swap(nums[nonZeroEnd],nums[i]);
++nonZeroEnd;
}
}
}
};
双指针,一个指针对每个元素遍历,如果是0,则寻找该元素之后第一个非0元素并将二者交换;如果不是0,则直接跳过。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int i = 0;i<nums.size();i++)
{
if(nums[i] == 0)
{
for(int j = i+1;j<nums.size();j++)
{
if(nums[j] == 0)
continue;
else
{
swap(nums[i],nums[j]);
break;
}
}
}
else
continue;
}
}
};