美文网首页
iOS算法一例

iOS算法一例

作者: zdrjson | 来源:发表于2018-01-19 15:31 被阅读32次

    突然看微信公众号中iOS Peak杂货铺的一篇文章,就“iOS程序员对算法的要求”,里面有一个例子:“检查通讯录的变化并上传服务器”。具体内容下图

    但是peak君没有给出答案,正要项目中也遇到这样的问题。于是就想怎么解决。

    上面代码的问题是两层循环嵌套,这样时间复杂度是O(N^2), 这样当N非常大的时候,非常可怕。

    按照peak的提示,如果我们用哈希表要做,时间复杂度会降低。iOS用哈希表就是字典与Set了。我们这里用字典。先把原来数组放到字典中,以其中id作为key,内容作为value。然后在让另一个数组到字典中查找有没有这个key,有这个key表示在原来数组中存在,没有的表示的话原来数组中没有这个key。

    具体代码可以这样写

    NSMutableDictionary *dic = [NSMutableDictionary dictionary];

        for (Model *content in _dataArray) {

            dic[content.contentId] = content;

        }

        for (Model *content in array) {

            if (![dic objectForKey:content.contentId]) {

                [_dataArray addObject:content];

            }

        }

    这样虽然还是两个循环,但是不是嵌套了。时间复杂度是O(N)+O(N)=O(N),嗯,最终是O(N)。

    算法这个是一个程序员的内功,平时都是写业务代码。想要第一个方法就写,以后写代码还要想想其他更优解。这样才能成长更快。

    相关文章

      网友评论

          本文标题:iOS算法一例

          本文链接:https://www.haomeiwen.com/subject/mxnooxtx.html