移动数组中的零-双指针的使用
题目描述
给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序
样例1:
输入: nums = [0, 1, 0, 3, 12],
输出: [1, 3, 12, 0, 0].
样例2:
输入: nums = [0, 0, 0, 3, 1],
输出: [3, 1, 0, 0, 0].
个人简单的代码实现
········int k=0;//来记录和筛选零的位置
int m=0;//新数组的下标
int n=nums.size();
for(int i=0;i<n;++i)
{
if(nums[k]==0)
{
k++;遇到零跳过
}
else
{
nums[m++]=nums[k++];//新数组赋值
}
}
for( m;m<n;m++)//末尾置零
{
nums[m]=0;
}
基于Swap的双指针写法
int left=0;
int right=0;
while(right<nums.size())
{
if(nums[right])//巧妙的使用0作为判断条件,自己要多学习
{
swap(nums[left++],nums[right]);//大佬赏心悦目的代码,实现了交换和赋值功能
//left永远指向第一个0的位置,right负责遍历
}
right++;
}