算法0-介绍

由于要找工作,最近刷了点题,看了点书,做了些校招笔试,总结一些算法笔试的要点吧。

1. 题目

笔试的时候,第一步还是要认真读题,这个没什么好说的,题都不懂是做不下去的。


2. 解题思路

在读完题目的时候,不要急着动手写代码。

这一步要做的是理清思路,可以借助画图等工具。

这一步的最终目标是得到算法流程图。


3. 输入输出

笔试的时候通常会有两种类型,

一种是不需要输入输出,直接在函数参数中给出要处理的数据,然后通过返回值返回。

另外一种是需要输入输出,需要输入输出的又分为两种:

    1. 通过终端输入输出

    2. 通过文件输入输出


4. 数据结构

算法笔试的时候通常要借助于一些常用的数据结构,比如:数组/字符串/链表/树/栈/队列/哈希表/集合等。

数组和字符串是两种最基本的数据结构,它们分别用连续内存存储数字和字符。

链表和树需要大量的指针操作,因此对指针操作要特别熟悉。

栈是一个和递归紧密相关的数据结构。

队列于广度有限遍历算法相关。


5. 算法

5.1 递归与循环

掌握递归的思想与执行流程,以及递归与循环之间的相互转换。

常见的题目包括:1~n求和,汉诺塔问题,斐波那契级数列。

5.2 查找

查找无非就是顺序查找,二分查找,哈希表查找,二叉树查找。

其中顺序查找,二分查找都是按照一定的规则在原有的数据上进行查找,

哈希表查找/二叉树查找是要构造一个特殊的数据结构,因此需要额外的存储空间。


5.3 排序

排序是算法中最基本的一个问题,因此各种算法也比较成熟,

需要对各种算法的思想/实现/复杂度/优化/稳定性烂熟于心。

常见的排序算法包括:冒泡排序/选择排序/插入排序/归并排序/快速排序/堆排序/希尔排序等,其中插入排序、归并排序、快排、堆排较为常用,要重点掌握。


5.4 贪心


5.5 分治

将现有问题划分成若干不相关的子问题,分别求解。


5.6 动态规划

将现有问题划分成若干相关的子问题,

寻找子问题的最优子结构,寻找递归式。

采用自顶向下分析,自底向上的解法。

因为在子问题求解中,通常会有大量重复的计算,因此需要一个额外的容器去存储已经计算的值,比如hashmap,这样就会减少一些重复计算。

常见的题目包括:

1维:青蛙跳台阶,钢条切割问题

2维:最长公共子序列,最短编辑距离


5.7 回溯法


5.8 位运算


6. 测试用例

功能性测试:是否能达到题目的要求。

特殊输入测试:比如空指针,输入的是字符串而不是数字等。


7. 提高代码质量


8. 编码风格

参考谷歌代码风格

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值