Fork me on GitHub
摘要: 基本概念 定义 动态规划既是一种数学优化的方法,同时也是编程的方法。 从数学的角度看,动态规划要解决的都是问题的最优解。而一个问题的最优解是由它的各个子问题的最优解决定的。(最优子结构) 从编程的角度看,动态规划可以借助编程的技巧去保证每个重叠的子问题只会被求解一次。(重叠子问题) 难点 应当采用什 阅读全文
posted @ 2019-11-15 17:56 JasonBUPT 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 思想分类 分治是把一个大规模的问题不断地变小然后进行推导的过程。 回溯则是从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程。 分治 思想 将一个问题的规模变小,然后再利用从小规模问题中得出的结果,结合当前的值或者情况,得出最终的结果。 模板 复杂度 公式法可以说是 阅读全文
posted @ 2019-11-15 17:55 JasonBUPT 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 基本的排序算法 冒泡排序和插入排序是最基础的,面试官有时候喜欢拿它们来考察你的基础知识,并且看看你能不能快速地写出没有 bug 的代码。 冒泡排序(Bubble Sort) 实现 每一轮,从杂乱无章的数组头部开始,每两个元素比较大小并进行交换,直到这一轮当中最大或最小的元素被放置在数组的尾部,然后不 阅读全文
posted @ 2019-11-15 17:45 JasonBUPT 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 基本数据结构 树 特点 树的结构十分直观,而树的很多概念定义都有一个相同的特点:递归,也就是说,一棵树要满足某种性质,往往要求每个节点都必须满足。例如,在定义一棵二叉搜索树时,每个节点也都必须是一棵二叉搜索树 正因为树有这样的性质,大部分关于树的面试题都与递归有关,换句话说,面试官希望通过一道关于树 阅读全文
posted @ 2019-11-15 16:57 JasonBUPT 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 基础数据结构 栈 特点 栈的最大特点就是后进先出(LIFO)。对于栈中的数据来说,所有操作都是在栈的顶部完成的,只可以查看栈顶部的元素,只能够向栈的顶部压⼊数据,也只能从栈的顶部弹出数据。 实现 利用一个单链表来实现栈的数据结构。而且,因为我们都只针对栈顶元素进行操作,所以借用单链表的头就能让所有栈 阅读全文
posted @ 2019-11-15 16:38 JasonBUPT 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 基础数据结构 链表(LinkedList) 优点 链表能灵活地分配内存空间 能在 O(1) 时间内删除或者添加元素,前提是该元素的前一个元素已知,当然也取决于是单链表还是双链表,在双链表中,如果已知该元素的后一个元素,同样可以在 O(1) 时间内删除或者添加该元素。 缺点 不像数组能通过下标迅速读取 阅读全文
posted @ 2019-11-15 16:19 JasonBUPT 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 基本数据结构 数组/字符串 优点 构建非常简单 能在 O(1) 的时间里根据数组的下标(index)查询某个元素 小写字母一共就 26 个 缺点 构建时必须分配一段连续的空间 查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数) 删除和添加某个元素时,同样需要耗费 阅读全文
posted @ 2019-11-15 15:49 JasonBUPT 阅读(230) 评论(0) 推荐(0) 编辑