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

移动零(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).

相关推荐

  1. 移动算法(leetcode283题)

    2024-07-19 02:50:04       53 阅读
  2. leetcode283移动

    2024-07-19 02:50:04       52 阅读
  3. [leetcode] 283. 移动

    2024-07-19 02:50:04       43 阅读
  4. Leetcode 283. 移动

    2024-07-19 02:50:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 02:50:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 02:50:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 02:50:04       58 阅读
  4. Python语言-面向对象

    2024-07-19 02:50:04       69 阅读

热门阅读

  1. 代码随想录学习 54day 图论 Bellman_ford 算法精讲

    2024-07-19 02:50:04       20 阅读
  2. 锁升级过程中的两次自旋 面试重点

    2024-07-19 02:50:04       22 阅读
  3. electron 应用的生命周期

    2024-07-19 02:50:04       23 阅读
  4. SQL基础

    2024-07-19 02:50:04       21 阅读
  5. 【Unity C#优化】业务逻辑代码方面的优化

    2024-07-19 02:50:04       21 阅读
  6. 【Linux】微基准测试

    2024-07-19 02:50:04       20 阅读
  7. AI发展下的伦理挑战,应当如何应对?

    2024-07-19 02:50:04       19 阅读
  8. 软件测试有光明的未来

    2024-07-19 02:50:04       20 阅读
  9. 1、PostgreSQL安装

    2024-07-19 02:50:04       20 阅读