算法学习(一)面试问题

1-1

对一组数据进行排序:

可以用快速排序O(nlogn),但是只能证明会快排,但忽略了使用环境。

(1)所以可以和面试官探讨:

1、这组数据有什么样的特征,比如是否包含大量重复元素,如果有那么三路排序更好,如果所有的排序都是独特的那普通的就好了。(很多语言的标准库都是三路快排)。

2、是否大部分数据距离他的正确位置很近?是否近乎有序?比如对银行近期发生的数据进行排序大多数这样就是近乎有序,处理这样的数据插入排序更好。

3、是否数据取值范围有限?比如学生成绩排序,这样计数排序更好。

4、比如是否需要稳定的排序,那么归并更好。

5、数据存储状况是怎么样的?快排依赖于数据的随机存取特征,如果数据是链表存储的,快排就不适用了,归并更好。

6、数据大小是否足以存储在内存中?需要使用外排序算法

(2)正确还包括对问题的独到见解,优化,代码规范,容错性

1-3

不要轻视基础算法与数据结构,而只关注有意思的题目

1、各种排序算法

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

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

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

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

1-4

解决算法面试的整体思路

1、注意题目中的条件:给定有序数组(二分查找),题目中的暗示设计O(nlogn)的算法(分治法),数据规模大概10000

2、没有思路的时候,给自己几个简单的测试用例

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

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

5、编写实际问题:极端条件判断(空指针,字符串为空,数量为0,指针为null),变量名,模块化,复用性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值