首页 > 代码库 > 把一个整数数组中所有的非0整数移到左边

把一个整数数组中所有的非0整数移到左边

1、一个整数数组,把非0的整数移到左边,对整数的顺序不做要求。写一个函数实现,并返回数组的非0整数个数。不使用额外的存储。比如:

初始数组为:[ 1, 0, 2, 0, 0, 3, 4 ],处理后的数组是:[ 4, 1, 3, 2, 0, 0, 0 ],函数返回非0整数的个数4。

解答:两个指针,一个从左向右移动,一个从右向左移动。

int moveLeft(int* arr, int len){    if (arr == NULL || len <= 0)        return -1;    int i = 0;    int j = len - 1;    while (i <= j)    {        if (arr[i] != 0)        {            if (arr[j] == 0)            {                j--;            }            i++;        }        else        {            if (arr[j] != 0)            {                arr[i] = arr[j];                arr[j] = 0;                i++;            }            j--;        }    }    return i;}                        

2、假设数组长度为N,有M个0,需要多少次交换。

min(M, N-M)

 

把一个整数数组中所有的非0整数移到左边