包建强的培训课程(5):算法与数据结构
算法与数据结构
一、 简介
本课程是基于数据结构来设计的,搜罗了各大公司面试过程中经常被问到的300多个算法题目,从中遴选出70道经典题目,分为单链表、数组、二叉树、栈、数字、逻辑推理等多个类别。
本课程将培训学员的逻辑思维能力,学以致用,在实战中编写出性能更好、逻辑更严谨的程序。
本课程适用于1-2年开发经验的程序员,对设计模式和算法有一些了解。
二、 培训大纲(2-4天)
第1天
上午 单链表
l 单链表的定义
l 单链表反转
l 倒数第四个元素
l 中间元素
l 删除无头单链表的一个节点
l 合并两个不交叉的有序链表
l 交换单链表中的任意两个元素
l 判断单链表是否有环
l 判断两个单链表是否相交,是则给出交点
l 用链表模拟大整数的加法运算
l 单链表排序
l 删除单链表中重复的元素
第1天
下午 栈和队列
l 栈和队列的定义
l 设计含有min函数的栈,要去算法复杂度为o(1)
l 用两个栈实现队列
l 用两个队列实现栈
l 判断栈的push、pop序列是否一致
l 递归反转一个栈,要求空间复杂度o(1)
l 如何用一个数组实现两个栈
l 如何用一个数组实现三个栈
第2天
上午 二叉树
l 二叉树的定义
l 三种周游方式
l 从顶部逐层打印二叉树的节点数据
l 如果判断一棵树是否为平衡二叉树
l 找出二叉树上任意两个节点的最近共同父结点
l 如何不用递归实现二叉树的前序/后序/中序遍历?
l 在二叉树中找出和为某一值的所有路径
l 把一个有序整数数组放到二叉树中?
l 判断整数序列是不是二叉搜索树的后序遍历结果
l 求二叉树的镜像
l 把二叉搜索树转变成排序的双向链表
第2天
下午 数组
l 查找数组中的唯一的重复元素(2)
l 删除数组中的唯一的重复元素(14)
l 删除有序数组中的重复元素,空间复杂度O(26)
l 1到1000存放在1001个元素的数组中,如何找出其中的一个重复数字(6)
l 找出数组中只出现了奇数次的1个数字,其它元素都成对出现(7)
l 查找数组的最大最小值(3)
l 长度为n的数组,存放了0到n范围内的整数,如何判断其中是否有重复元素,要求空间复杂度0(1)(8)
l 数组的循环右移(13)
l “最大和”连续子序列(20)
l 调整数组顺序使奇数位于偶数前面(28)
l 判断有序数组中是否存在两个唯一的元素(45)
第3天
上午 数字
l 按位反转数字(1234=)4321)
l 求从1加到n
l 用加法实现减法
l 把字符串转换成蒸熟
l Fibnacci数列的3种算法
l 整数分割
l 大数的模计算
l Excel的数字转字母
l 根据(1,5)随机数生成器,生成(1,7)随机数
l 计算质数、完全数、水仙花数、快乐数、回文数
l 删除100位数字后的最大数
l 找出2n个数字中重复n次出现的数字
第3天
下午 杂题
l 扑克牌洗牌算法
l 判断一个点是否在三角形内
l IntStr函数的实现
l 写一个检查字符串是否是整数的函数,如果是则返回这个整数。
l 递归反转一个栈
l 栈的排序
l 八皇后问题
l 8x8的棋盘一共有多少长方形和正方形
l 拈
第4天
上午 逻辑推理
l 给你一个打乱的魔法,如何在第二天把它调整好
l 一根金条付薪水
l 寻找四个药丸罐子中某个被污染的药丸罐
l 大象背香蕉问题
l 谷歌赛马
l 九个点画十条直线,每条直线至少有三个交点
l 烧绳子算时间
l 高楼扔鸡蛋
l 海盗分金子
l 有7克、2克砝码各一个,天平一只,如何只用天平称三次将140克的盐分成50、90克各一份