题目来源:283. 移动零
解法1:模拟建立一个指针index,初始化为0。
遍历数组,对于每一个元素nums[i],若它不为0,则插入到前面的nums[index],index++。
最后在数组的末尾添上0。
代码:
void moveZeroes(int* nums, int numsSize){
int index=0;
for(int i=0;i
解法2:双指针法
使用双指针,左指针left指向当前已经处理好的序列的尾部,右指针right指向待处理序列的头部。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。
每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。
另外,还有以下性质:
左指针左边均为非零数;右指针左边直到左指针处均为零。
代码:
void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
void moveZeroes(int* nums, int numsSize){
int left=0;
int right=0;
while(right
结果:



