码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-12-12 18:55:53      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   使用   sp   div   log   bs   

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整数移到左边

标签:style   blog   ar   color   使用   sp   div   log   bs   

原文地址:http://www.cnblogs.com/litao-tech/p/4160244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!