要求循环队列不损失一个空间全部能得到利用_7年BAT经验,不熟悉这两点,结果面试一轮游……...

efa763b2b91acff072c8c3b40d52dcea.png

前段时间,一位阿里员工在某APP上吐槽,自己7年BAT经验去小公司面试,居然因为俩道算法题的解答速度慢了一点就挂了……

9f1d0545a7ee3621ea6d3beec647bd0b.png

其实目前国内几乎只要是技术岗,面试中都100%会问算法和数据结构。

这两者能快速体现候选人真实的水平,比如代码量,代码的质量,性能,思维是否有逻辑,是否灵活。

算法和数据结构更是计算机科学中最基础的知识之一,要是基础不牢固,谁敢把后续更有挑战性的内容交给你那?

因为算法题回答速度慢被刷,的确很尴尬。

但是更证明一件事:如今已经不缺只掌握编程语言的程序员,想要拿到offer,你必须研究数据结构和算法!

这次小七专门把《面试求职》第四期中前两节课程,分享给大家。

算法概述

一、前言

1.应用范围:机器学习、数据挖掘、自然语言处理、图形学等。

2.求职方面的考点:贪心 、分治、动态规划、树、图等。而且考官非常喜欢用算法来验证你的代码水平!

二、概述

1.定义:简单的说,算法就是解决问题的方式。

2.特点:有穷性、确定性、可行性、有输入&输出。

三、基础算法:

1.穷举法:求N个数的全部排列、8皇后问题。

2.分而治之:二分查找——减而治之、归并排序——分而治之。

3.贪心:最小生成树——Prim、Kruskal、单元最短路——Dijkstra。

4.动态规划:背包问题、士兵路径。

复杂度解析

一、概述

谈算法不谈复杂度=耍流氓!

硬件发展是常数级的,但是算法规模扩大是指数级别的。

在实现之前,要预估算法所需要的资源 :时间、空间。

二、时空复杂度:

1.含义:使用大O记号(最坏情况,忽略系数)。

2.包括:时间复杂度(基本操作次数)、空间复杂度(占用内存字节数)、两者的区别是空间可以再利用 、联系是时空互换(Hash表)。

3.举例:

O(1) :基本运算,+,-,*,/,%,寻址 。

O(logn) :二分查找 。

O(n1/2) :枚举约数。

O(n) :线性查找 。

O(n2): 朴素最近点对 。

O(n3) : Floyd最短路、普通矩阵乘法。

O(nlogn): 归并排序 。

O(2n) :枚举全部的子集。

O(n!): 枚举全排列 。

上述例子的总结:

优秀:O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn) 。

可能可以优化:O(n2) < O(n3) < O(2n) < O(n!) 。

4.方法:输入输出、数循环次数、均摊分析。

栈和队列

一、两者的共性和区别

1.共性:存放数据的线性表、空间复杂度O(n)、单次操作时间复杂度O(1) 。

2.区别:栈——先进后出(FILO),队列——先进先出(FIFO)。

二、操作

入栈/队列、出栈/队列、判断满/空。

三、实现

1.需要的工具:数组和链表皆可(线性表)、指针(辅助变量):栈顶/底指针、队头/尾指针。

2.关键:出入元素的同时移动指针。

四、应用

括号匹配测试及模拟系统栈,因为篇幅比较长,可以在公众号后台回复“应用”获取。

哈希表

一、哈希表概述

1.定义:存放数据的集合。

2.操作:根据(Key, Value)进行,插入、查找、删除(可以没有)。

3.空间复杂度:O(m)。

4.单次操作时间复杂度:O(1) 。

5.本质:Key的索引。

二、哈希表例题

1.题目:给出n个[0, m)范围内的整数,去重。

2.解题思路:

①快速排序:期望时间复杂度 O(nlogn) ,附加空间复杂度 O(1)。

②计数(基数)排序: 时间复杂度 O(n + m) 、附加空间复杂度 O(m)。

3.在思考一下:

若n << m,计数排序的大量空间被浪费。

只需判断是否出现过,优化?

将Key区间[0, m) 映射到 [0, p) 。

H(key) = key mod p、若m > p, 多对一的映射方式。

三、哈希表的实现

1.处理冲突(Key, Value):开放地址法(数组)、拉链法 (数组+链表)。

2.负载率:负债率=已有元素大小 / 存储散列大小。

3.哈希函数设计:负载率越低,效率越高,一般负载率小于50%。

四、哈希表应用

1.题目:设字符串A=‘12314123’,求‘123’在A中出现的次数。如果不会写KMP又想要O(n),应该怎么处理那?

2.思路:Key(‘123’) = ‘1’* 10^2 +‘2’* 10 + ‘3’* 1 = 123。

3.问题:Key相等时Value有可能不同、每次比较Value也是不小的开销,特别是Value可能很大、不考虑Value将产生错误率(错误率换时间)、多重哈希(降低错误率)。

布隆过滤器

一、布隆过滤器概述

1.定义:判断一个字符串是否出现过的数据结构

2.和哈希表的区别:哈希表是空间换时间,而布隆过滤器是错误率换空间。

二、布隆过滤器的实现

1.由01的数字序列构成

2.插入:多个不同hash函数计算Key,置1

3.查找:有一个为0不可能存在,全为1可能存在

4.空间?

9457d076fd05930d3c572783c9c71720.png

三、布隆过滤器的评价

1.优点:时间和空间、多个hash函数可并行、交差并(位运算)。

2.缺点:错误率随着负载率上升而上升 、无法删除。

这次关于基础的算法和数据结构就分享到这里了,下次想看到哪方面的干货,欢迎在评论区中写出来哦。

毕业季福利

原价800元的Python入门课程

现在限时免费!没有任何要求,直接领取就可以!

34774c125fe549003a73ea4befb1ebe9.png

任何疑问,教师团队随时解答

虽然是免费课,但教师团队可没有缩水,依旧是BAT高级专家配合顶级高校硕士进行教学。

8c25741f2bfdb4f4aa91f881ac868144.png

立刻微信搜索公众号“七月在线实验室

回复“Python”开始学习

每天更新干货,帮你踏入AI领域成为技术leader。

应届生学员转行拿到52万年薪,大量学员转行后拿到30-40万年薪!

讲师均由各大公司技术leader和国内外顶级高校博士组成!

马上开始学习,和“前辈们”一样进入心仪公司,夺取高薪,成为人生赢家。

也许你面试时的考官就是七月在线的讲师/学员!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值