- Move Zeroes
题目分析:将数组中所有的0元素移动到数组尾部。直接想法先判断是否为后移位,再根据位置再补0。
void moveZeroes(int* nums, int numsSize){
if(numsSize < 2)
return nums;
int j = 0;
for(int i = 0; i < numsSize; i++)
{
if(nums[i] != 0)
{
nums[j++] = nums[i];
}
}
for(int i = j; i < numsSize; i++)
{
nums[i] = 0;
}
}
查看解答发现更简单的算法,直接循环判断是否为0若为0则跳过该值,若有值则替换,后续不断将0往后顺延。
void moveZeroes(int* nums, int numsSize){
//loop
//a[0]!=0 ? move to valid position and make tis position 0
int va=0,i;
for(i=0;i<numsSize;i++)
if(nums[i]){
nums[va++]=nums[i];
nums[i]= va==i+1? nums[i]:0;
}
}