object-C 解答算法:移动零(leetCode-283)

avatar
作者
猴君
阅读量:4

移动零(leetCode-283)

题目如下图:(也可以到leetCode上看完整题目,题号283)

解题思路:

本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少?

这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置;

当所有“非0元素值”都移动完了,j 的位置以及j后面的位置 都置为0即可.

代码如下:

- (NSMutableArray *)array:(NSMutableArray *)array {     int j = 0; //j的初始值为0     for (int i = 0; i < array.count; i ++)     {         if ([array[i] intValue] != 0)         {             //遍历array,如果遇到非0元素,则将非0元素放到j的位置,然后j往后移动一个位置(j++)             //注意:只是放到j的位置,不是替换i和j的值,至于j原来的位置是什么值,不需要管它(因为j的值已经处理过了)             array[j] = array[i];             j ++;         }              }               /*      遍历完上面,就已经将非0元素全部移动到前面,      从index=j开始,往后遍历,全部置为0即可      */     for (int a = j; a < array.count; a ++)     {         array[a] = @0;     }          return array; } 

可以看到,以上代码的时间复杂度为 2n,根据大O渐进表示法,其最终的时间复杂度为n ,即 0(n).

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!