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

相关推荐
nuo53420213 分钟前
C语言实现类似面向对象的三大特性
c语言·开发语言
EmbedLinX19 分钟前
Linux内核之文件系统:从VFS到实际存储的运作机制
linux·服务器·c语言·c++
客卿12330 分钟前
力扣二叉树简单题整理--(包含常用语法的讲解)
算法·leetcode·职场和发展
hrrrrb30 分钟前
【算法设计与分析】递归与分治策略
算法
We་ct35 分钟前
LeetCode 28. 找出字符串中第一个匹配项的下标:两种实现与深度解析
前端·算法·leetcode·typescript
血小板要健康41 分钟前
118. 杨辉三角,力扣
算法·leetcode·职场和发展
_OP_CHEN44 分钟前
【算法基础篇】(五十一)组合数学入门:核心概念 + 4 种求组合数方法,带你快速熟悉组合问题!
c++·算法·蓝桥杯·排列组合·组合数学·组合数·acm/icpc
漫随流水1 小时前
leetcode回溯算法(491.非递减子序列)
数据结构·算法·leetcode·回溯算法
睡一觉就好了。1 小时前
排序--直接排序,希尔排序
数据结构·算法·排序算法
_pinnacle_1 小时前
多维回报与多维价值矢量化预测的PPO算法
神经网络·算法·强化学习·ppo·多维价值预测