美文网首页iOS开发工程师-面试之道
iOS面试算法基础(1)-基本数据结构

iOS面试算法基础(1)-基本数据结构

作者: iOS大蝠 | 来源:发表于2019-10-28 21:55 被阅读0次

数组

数组是最基本的数据结构。在 Swift 中,以前 Objective-C 时代中将 NSMutableArray 和 NSArray 分开的做法,被统一到了唯一的数据结构 —— Array 。虽然看上去就一种数据结构,其实它的实现有三种:

ContiguousArray:效率最高,元素分配在连续的内存上。如果数组是值类型(栈上操作),则 Swift 会自动调用 Array 的这种实现;如果注重效率,推荐声明这种类型,尤其是在大量元素是类时,这样做效果会很好。

Array:会自动桥接到 Objective-C 中的 NSArray 上,如果是值类型,其性能与 ContiguousArray 无差别。

ArraySlice:它不是一个新的数组,只是一个片段,在内存上与原数组享用同一区域。

字典和集合

字典和集合(这里专指HashSet)经常被使用的原因在于,查找数据的时间复杂度为 O(1)。

一般字典和集合要求它们的 Key 都必须遵守 Hashable 协议,Cocoa 中的基本数据类型都

满足这一点;自定义的 class 需要实现 Hashable,而又因为 Hashable 是对 Equable 的扩展,

所以还要重载 == 运算符。

集合和字典在实战中经常与数组配合使用,请看下面这道算法题:

给一个整型数组和一个目标值,判断数组中是否有两个数字之和等于目标值

这道题是传说中经典的 “2Sum”,我们已经有一个数组记为 nums,也有一个目标值记为 target,最后要返回一个 Bool 值。

最粗暴的方法就是每次选中一个数,然后遍历整个数组,判断是否有另一个数使两者之和为 target。这种做法时间复杂度为 O(n^2)。

采用集合可以优化时间复杂度。在遍历数组的过程中,用集合每次保存当前值。假如集合中已经有了目标值减去当前值,则证明在之前的遍历中一定有一个数与当前值之和等于目标值。这种做法时间复杂度为 O(n)

如果把题目稍微修改下,变为

给定一个整型数组中有且仅有两个数字之和等于目标值,求两个数字在数组中的序号

字符串和字符

字符串在算法实战中极其常见。在 Swift 中,字符串不同于其他语言(包括 Objective-C),它是值类型而非引用类型,它是多个字符构成的序列(并非数组)。

关于字符串,我们来一起看一道以前的 Google 面试题。

给一个字符串,将其按照单词顺序进行反转。比如说 s 是 "the sky is blue",那么反转就是 "blue is sky the"。

这道题目一看好简单,不就是反转字符串的翻版吗?这种方法有以下两个问题

每个单词长度不一样

空格需要特殊处理

这样一来代码写起来会很繁琐而且容易出错。不如我们先实现一个字符串翻转的方法。

有了这个方法,我们就可以实行下面两种字符串翻转:

整个字符串翻转,"the sky is blue" -> "eulb si yks eht"

每个单词作为一个字符串单独翻转,"eulb si yks eht" -> "blue is sky the"

整体思路有了,我们就可以解决这道问题了

时间复杂度还是 O(n),整体思路和代码简单很多。

总结

在 Swift 中,数组、字符串、集合以及字典是最基本的数据结构,但是围绕这些数据结构的问题层出不穷。而在日常开发中,它们使用起来也非常高效(栈上运行)和安全(无需顾虑线程问题),因为他们都是值类型。

相关文章

  • 收集的网站

    数据结构PDF下载地址Ios动画教程 IOS 面试排序算法

  • iOS面试算法基础(1)-基本数据结构

    数组 数组是最基本的数据结构。在 Swift 中,以前 Objective-C 时代中将 NSMutableArr...

  • 算法与数据结构

    数据结构 数据结构与算法分析_Java语言描述(第2版) 算法 计算机算法基础算法导论编程之法_面试和算法心得 c...

  • #算法与数据结构书籍

    数据结构 数据结构与算法分析_Java语言描述(第2版) 算法 计算机算法基础算法导论编程之法_面试和算法心得 c...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

  • 面试分享:淘宝商城四面(附架构面试专题)及B2C商城架构项目实战

    一面主要问题如下(主要注重基础,问得很深很广,压力面试): 首先自我介绍 数据结构算法的基本问题,如排序算法,二叉...

  • 阿里栈

    -> 项目介绍 * 要有特色,抓住面试 -> 算法(这次电话面试未考,现场面试应该会随时考) * 基础数据结构要会...

  • 面试题汇总

    ? 1. 基础 细说@property iOS基础面试题1(5.16) iOS基础面试题2 (5.24) 标哥(黄...

  • 算法

    来源:开发者应该掌握的几种排序算法 - 简书 来源:ios面试数据结构与算法 - CSDN博客 首先要知道一个算法...

  • iOS笔记-常见概念(二)

    1、熟悉sql基本语法,和数据库使用 sqlite3 ,core data ,realm 2、数据结构和算法基础,...

网友评论

    本文标题:iOS面试算法基础(1)-基本数据结构

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