玩转算法----面试

====什么是算法面试====

算法面试不是什么:

  1. 不代表能够正确的回答每一个算法问题,但是合理的思考方向其实更重要,也是正确完成算法面试问题的前提。

  2.算法面试优秀并不意味着技术面试优秀

  3. 技术面试优秀不意味着能够拿到Offer.

====合理的思考路径=====

  目的:给面试官展示出你的思考路径,将算法面试过程看作是和面试官一起探讨一个问题的解决方案,对于问题的细节和应用环境,可以和面试官沟通,这种沟通本身很重要,它暗示着你思考问题的方式。

  例如:对数据进行排序

  1. 快速排序算法:O(nlogn)

  2. 这组数据有什么特征,是否包含了大量重复的元素,是否三路快排更快速。

  比如,JAVA 背后就是三路快排。

  3. 这组数据是否近乎有序的,是否距离它正确的位置很近,如果是的话,用插入排序法就很快。

  4.如果数据是有区间的,计数排序就更好。比如高考成绩。

  5. 快排依赖于数组的随机存储,如果现在是使用链表的话,归并排序会更快。

======

  面向对象 设计模式 网络相关,安全相关,内存相关,并发相关,系统设计.

======

  高级的算法提及会很低:红黑树  计算几何  B-Tree 数论  FFT 斐波那契数

======

  不要轻视基础算法和数据结构: 各种排序算法,

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

  基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集

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

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

=====

  1.注意题目中的条件

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

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

  4.优化算法

    1>遍历常见的算法思路,便利常见的数据结构

    2> 空间与时间的交换,哈希表,预处理信息(排序)

  ===实际编写问题===

    1.数组为空,字符串为空,数量为0,指针为NULL,要注重模块化,复用性。

  

  

猜你喜欢

转载自www.cnblogs.com/dagailun/p/12368685.html
今日推荐