玩转算法面试笔记

本文深入探讨了算法面试中的关键点,包括排序算法的选择依据(如三路快排、插入排序、计数排序)、数据结构的应用(如堆、二叉树、图、链表)、基础算法(如深度优先、广度优先、二分查找)以及解决算法问题的整体思路。特别强调了在实际问题中考虑数据特性、空间效率和时间复杂度的重要性。此外,还详细讨论了数组、链表、查找表相关问题及二叉树、递归和回溯法、动态规划和贪心策略的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title: 玩转算法面试笔记

主要分章节记录了LeetCode的题,看题目的话可以从第二章开始

1、聊聊算法面试

1.1、对一组数据进行排序,你会怎么做呢

1、这组数据有什么样的特征?

  • 有没有可能包含有大量重复的元素?

    如果有这种可能的话,三路快排是更好地选择。(Java种快排的基本实现就是使用三路快排)

  • 是否大部分数据距离它正确的位置很近?是否近乎有序?

    如果是这样的话,插入排序是更好地选择。(如对银行的业务按照业务发生的时间进行排序,大多数业务先发生也先结束,少数处理的业务先发生但是处理时间较长后结束)

  • 是否数据的取值范围非常有限?比如对学生成绩排序。

    如果是这样的话,计数排序是更好地选择。

2、对排序有什么额外的要求?

  • 是否需要稳定排序?

    如果是的话,归并排序是更好地选择。

3、数据的存储状况是怎样的?

注:快排非常依赖于数组的随机存取

  • 是否是使用链表存储的?

    如果是的话,归并排序是更好地选择。

  • 数据的大小是否可以装载在内存里?

    数据量很大,或者内存很小,不足以装载在内存里,需要使用外排序算法。

在很多情况下,基础的普通的快排都不是最优的选择,甚至在一些情况下,快排根本是不适用的,在工作中真实的处理一个问题,就需要考虑各种各样的条件。关键在于你所表达出的解决问题的思路。

1.2、算法面试没有那么难

并不需要啃完一本《算法导论》,强调理论证明。

看书的时候重思想,轻理论

高级数据结构和算法面试提及的概率很低(第一轮)

  • 红黑树

  • 计算集和

  • B-Tree

  • 斐波那契堆

  • 数论

  • FFT

那么算法面试的准备范围是什么?

不要轻视基础算法和数据结构,而是关注“有意思”的题目。

  • 各种排序算法

  • 基础的数据结构和算法实现:堆、二叉树、图…

  • 基础数据结构的使用:链表、栈、队列、哈希表、图、trie、并差集…

  • 基础算法:深度优先、广度优先、二分查找、递归…

  • 基础算法思想:递归、分治、回溯搜索、贪心、动态规划…

在学习和实践做题之间要掌握平衡。不要只关注于题目的正确与否(只刷题),更要注重其中的算法思想。

1.3、解决算法面试问题的整体思路

  1. 注意题目中的条件。

    • 比如给定一个有序数据…

      是不是能用二分查找法来进行相关的搜索

    • 有一些题目中的条件本质是暗示

      • 设计一个O(nlogn)的算法

        • 八成离不开分治法,也就是在一棵搜索树中完成任务

        • 这个O(nlogn)是不是对一个数组排序的时间复杂度,我们是不是要先对整个数组进行排序,然后看有没有可能在O(n)或者O(logn)的时间复杂度下完成其他的任务

      • 无需考虑额外的空间

        是不是需要开辟额外的空间,用空间换时间

      • 数据规模大概是10000

        设计O(n2)的算法就可以解决这个问题,这是因为对于O(n2)的算法完全可以处理百万级甚至是千万级的数据

  2. 当没有思路的时候,给自己几个简单的测试用例,试验一下;

  3. 不要忽视暴力解法,暴力解法通常是思考的起点。

  4. **优化算法。**遍历常见的算法思路,遍历常见的数据结构,空间和时间的交换(哈希表),对数据进行预处理(排序)。在瓶颈处寻找答案:O(nlogn)+ O(n^2) ; O(n^3)。

实际编写问题

1、极端条件的判断。数组为空,字符串为空?数量为0?指针为NULL等等

2、变量名最好具有语义

3、代码的模块化,复用性等等

2、数组常见问题

对撞指针

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值