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).

相关推荐
依然鸣11 分钟前
蓝桥杯多校模拟赛(第二场)题解
数据结构·c++·经验分享·学习·算法·图论
依然鸣22 分钟前
蓝桥杯多校模拟赛 题解
数据结构·c++·经验分享·学习·算法·蓝桥杯
AKA__Zas32 分钟前
芝士算法(位运算)
java·开发语言·算法·leetcode·学习方法
wabs6661 小时前
关于图论【Kruskal算法|卡码网53.寻宝的思考】
数据结构·算法·图论·卡码网
hans汉斯1 小时前
人工智能与机器人研究|面向无标签数据的三维场景语义理解方法研究
人工智能·神经网络·算法·信息可视化·cnn·机器人
天空'之城9 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
小程故事多_8011 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_9561219713 小时前
二分算法(知识点+题目)
c++·算法
AndrewHZ15 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
小星星闪亮登场16 小时前
2026萌新联赛第三场-- (郑州轻工业大学)
数据结构·c++·经验分享·算法·贪心算法·排序算法·深度优先