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指针
c语言·开发语言
鹿角片ljp18 分钟前
LeetCode215: 数组中的第K个最大元素 —— 从快速选择到堆排
算法·排序算法
ACP广源盛1392462567319 分钟前
长距传输全能芯 @ACP#GSV5800 Type‑C/DP1.4/HDMI2.0 高速延长芯片
c语言·开发语言·网络·人工智能·嵌入式硬件·计算机外设·电脑
cmc102824 分钟前
230.C语言循环的相关延时计算
c语言·开发语言
天若有情67327 分钟前
用动态规划思路,一步一步实现响应式数据(从本质到落地)
算法·动态规划·代理模式
isNotNullX27 分钟前
数据挖掘是什么?数据挖掘算法有哪些?
人工智能·算法·数据挖掘
WeeJot嵌入式32 分钟前
【中断】初识中断以及外部中断的使用
c语言·stm32·单片机·嵌入式硬件·嵌入式
剑挑星河月32 分钟前
73.矩阵置零
数据结构·算法·leetcode·矩阵
MicroTech202532 分钟前
MLGO微算法科技:面向大规模量子网络的通用纠错方案实现关键进展
网络·科技·算法
Rabitebla33 分钟前
【C++】手撕日期类——运算符重载完全指南(含易错点+底层逻辑分析)
java·c语言·开发语言·数据结构·c++·算法·链表