数据结构和算法基础
数据结构和算法基础讲解
傅晨明
毕业于杭州电子科技大学
展开
-
第20课-字符串
文章目录字符串基础知识字符串遍历字符串字符串比较字符串相关算法基础问题Atoi字符串操作问题Anagram异位词问题 - HomeworkPalindrome 回文串问题高级字符串算法最长子串、子序列字符串基础知识字符串Python:x = ‘abbc’x = “abbc”Java:String x = “abbc”;C++:string x(“abbc”);string...原创 2019-12-10 13:41:09 · 279 阅读 · 0 评论 -
算法代码模板
文章目录递归分治DFS 代码模板BFS 代码模板二分查找Tire 树递归Python 代码模板def recursion(level, param1, param2, ...): # recursion terminator if level > MAX_LEVEL: process_result return # process l...原创 2019-12-03 08:48:19 · 170 阅读 · 0 评论 -
第19课-高级动态规划
小结提纲动态规划;递归、分治多种情况的动态规划的状态转移方程进阶版动态规划递归、分治、回溯、动态规划递归 - 函数自己调用自己public void recur(int level, int param) { // terminator if (level > MAX_LEVEL) { // process result return...原创 2019-12-02 10:11:52 · 458 阅读 · 0 评论 -
各种排序算法模板
文章目录冒泡排序快速排序插入排序选择排序堆排序归并排序计数排序冒泡排序// 冒泡排序,a表示数组,n表示数组大小 public void bubbleSort(int[] a, int n) { if (n <= 1) return; for (int i = 0; i < n; ++i) { // 提前退出冒泡循环的标志位 boolean flag =...原创 2019-12-01 19:54:50 · 308 阅读 · 0 评论 -
第18课-排序算法
文章目录排序算法初级排序 - O(n^2)高级排序 - O(N*LogN)快速排序(Quick Sort)归并排序(Merge Sort)— 分治归并 和 快排比较堆排序(Heap Sort)特殊排序 - O(n)排序动画实战题目排序算法比较类排序: 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元...原创 2019-11-25 09:06:56 · 258 阅读 · 1 评论 -
第17课-布隆过滤器、LRU Cache
文章目录布隆过滤器 Bloom FilterHashTable + 拉链存储重复元素Bloom Filter vs Hash Table布隆过滤器示意图案例科普Python 实现其他实现LRU CacheCache 缓存CPU SocketLRU CacheLRU cache 工作示例替换策略实战题目LRU Cache — PythonLRU Cache — Java布隆过滤器 Bloom Fi...原创 2019-11-25 08:53:52 · 354 阅读 · 0 评论 -
第16课-位运算
文章目录为什么需要位运算位运算符XOR - 异或指定位置的位运算实战位运算要点实战题目N皇后的位运算解法DP + 位运算为什么需要位运算• 机器里的数字表示方式和存储格式就是 二进制• 十进制 <—> 二进制 : 如何转换?如何从十进制转换为二进制4(d): 01008(d): 010005(d): 01016(d): 0110位运算符含义运算符示例...原创 2019-11-25 08:40:28 · 238 阅读 · 0 评论 -
第15课-高级树、AVL 树和红黑树
文章目录二叉树二叉树遍历Binary Search Tree 二叉搜索树性质如何查找结点极端情况保证性能的关键思考:如何平衡?AVL 树记录左右子树高度旋转操作子树形态:右右子树 —> 左旋子树形态:左左子树 —> 右旋子树形态:左右子树 —> 左右旋AVL 总结红黑树关键性质对比二叉树二叉树遍历Pre-order/In-order/Post-order前序(Pre...原创 2019-11-18 09:23:32 · 317 阅读 · 0 评论 -
第14课-高级搜索
文章目录初级搜索Coin change(零钱置换)的状态树DFS 代码 - 递归写法DFS 代码 - 非递归写法BFS 代码剪枝回溯法实战练习八皇后代码LeetCode 讨论区代码剖析双向 BFS实战题目启发式搜索(A*)基于 BFS 代码A* search估价函数实战题目Shortest PathSliding Puzzle初级搜索朴素搜索优化方式:不重复(fibonacci)、剪枝(生...原创 2019-11-18 09:07:33 · 184 阅读 · 0 评论 -
第13课-字典树和并查集
文章目录字典树 Trie内容基本结构基本性质核心思想实战题目并查集 Disjoint Set适用场景基本操作初始化查询、合并路径压缩Java 实现Python实现实战题目字典树 Trie内容字典树的数据结构字典树的核心思想字典树的基本性质基本结构基本性质结点本身不存完整单词;从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的 字符串;每个结点的所有子结点路...原创 2019-11-18 08:51:16 · 274 阅读 · 0 评论 -
数据结构和算法代码模板
文章目录递归代码模板Java 代码模板Python 代码模板分治代码模板递归代码模板Java 代码模板public void recur(int level, int param) { // terminator if (level > MAX_LEVEL) { // process result return; } // process...原创 2019-11-17 08:31:18 · 478 阅读 · 0 评论 -
第12课-动态规划
文章目录分治 + 回溯 + 递归 + 动态规划递归代码模版分治 Divide & Conquer感触动态规划 Dynamic Programming实战例题一 斐波拉契数列实战例题二 路径计数动态规划关键点实战例题三 最长公共子序列子问题DP 方程动态规划小结MIT algorithm course实战题目实战题目实战题目Homework分治 + 回溯 + 递归 + 动态规划递归代码模...原创 2019-11-16 23:00:13 · 191 阅读 · 0 评论 -
第11课-二分查找
文章目录二分查找的前提代码模版示例实战题目Homework二分查找的前提目标函数单调性(单调递增或者递减)存在上下界(bounded)能够通过索引访问(index accessible)代码模版left, right = 0, len(array) - 1while left <= right: mid = (left + right) / 2 if array...原创 2019-11-04 08:33:15 · 182 阅读 · 0 评论 -
第10课-贪心算法
文章目录贪心算法 Greedy实战题目贪心法的反例何种情况下用到贪心算法?Homework贪心算法 Greedy贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。贪心法可以解...原创 2019-11-04 08:28:34 · 355 阅读 · 0 评论 -
第9课-深度优先搜索和广度优先搜索
文章目录遍历搜索搜索 - 遍历深度优先搜索 Depth-First-Search实战题目Homework遍历搜索在树(图/状态集)中寻找特定结点public class TreeNode { public int val; public TreeNode left, right; public TreeNode(int val) { this.val = val; t...原创 2019-10-28 10:40:27 · 198 阅读 · 0 评论 -
第8课-分治、回溯
文章目录递归状态树分治 Divide & Conquer分治代码模板回溯 Backtracking预习题目实战题目分治 Divide & Conquer递归状态树分治 Divide & Conquer分治代码模板def divide_conquer(problem, param1, param2, ...): # recursion terminator...原创 2019-10-21 13:32:23 · 171 阅读 · 0 评论 -
第7课-泛型递归、树的递归
文章目录递归 Recursion盗梦空间计算 n!Java 代码模版思维要点实战题目实战题目Homework树的面试题解法一般都是递归节点的定义重复性(自相似性)示例代码def preorder(self, root): if root: self.traverse_path.append(root.val) self.preorder(root.left) ...原创 2019-10-21 13:27:51 · 369 阅读 · 2 评论 -
第6课-树、二叉树、二叉搜索树
树 Tree二叉树 Binary Tree图 GraphLinked List 是特殊化的 TreeTree 是特殊化的 Graph示例代码Pythonclass TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, NoneJavapublic ...原创 2019-10-21 12:30:26 · 369 阅读 · 0 评论 -
第5课-哈希表、映射、集合
文章目录Hash table工程实践Hash FunctionHash Collisions完整结构复杂度分析Java codePython codeMap, Set : interfaces复杂度分析实战题目Hash table哈希表(Hash table),也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的...原创 2019-10-21 10:55:57 · 437 阅读 · 0 评论 -
第4课-栈、队列、双端队列、优先队列
文章目录1 栈和队列1.1 原理图1.2 Stack & Queue 关键点2 Deque: Double-End Queue3 Stack、Queue、Deque 的工程实现示例代码 - Stack示例代码 - Queue示例代码 - DequePriority Queue5 Stack 和 Queue 的实现(源码分析)6 复杂度分析7 小结8 实战题目预习题目实战题目作业1 栈和队...原创 2019-10-17 10:56:50 · 259 阅读 · 0 评论 -
第3课-数组、链表、跳表
数组、链表(Array、 Linked List)Array• Access: O(1)• Insert: 平均 O(n)• Delete: 平均 O(n)Doubly Linked List时间复杂度spaceO(n)prependO(1)appendO(1)lookupO(n)insertO(1)dele...原创 2019-08-30 23:35:38 · 511 阅读 · 0 评论 -
第2课-算法的复杂度
– Data Structure –ArrayStack / QueuePriorityQueue (heap)LinkedList (single / double)Tree / Binary TreeBinary Search TreeHashTableDisjoint SetTrieBloomFilterLRU Cache– Algorithm –General C...原创 2019-08-30 22:54:47 · 177 阅读 · 0 评论 -
第1课-如何有效学习和训练算法和数据结构
切题四件套Clarification 明确题目意思Possible solutions 所有可能的解– compare(time/space)— optimal(加强)Coding(多写)Test cases 测试案例原创 2019-09-06 23:29:58 · 430 阅读 · 0 评论 -
算法训练营总览
文章目录预习周第1课 数据结构和算法总览第2课 训练准备和复杂度分析第1周第3课 数组、链表、跳表第4课 栈、队列、优先队列、双端队列第2周第5课 哈希表、映射、集合第6课 树、二叉树、二叉搜索树第7课 泛型递归、树的递归第8课 分治、回溯第3周第9课 深度优先搜索和广度优先搜索第10课 贪心算法第11课 二分查找第4周期中复习直播、期中测验第5周第12课 动态规划第6周第13课 字典树和并查集第...原创 2019-10-28 08:08:14 · 1479 阅读 · 0 评论 -
Java PriorityQueue源码分析
文章目录类继承关系QueueAbstractQueuePriorityQueue源码分析grow方法offer方法poll方法remove方法总结Java API 地址:https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/PriorityQueue.htmljdk源码下载地址https://gitee...原创 2019-10-20 20:42:03 · 199 阅读 · 0 评论 -
Deque简单使用
Deque API文档地址:https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Deque.htmlDeque API使用示例push和poppublic void doDeque() { Deque<String> deque = new LinkedList<String&g...原创 2019-10-20 19:28:34 · 377 阅读 · 0 评论 -
如何通过LeetCode来进行算法题目练习
Deliberate Practicing• 坚持、刻意练习• 练习缺陷、弱点地⽅方• 不不舒服、不不爽、枯燥LeetCodehttps://leetcode.com/problemset/all/题⽬目 + 分类 + 公司归档• 做题• 时间复杂度• Editor: Atom、 Visual Code、 Vim、 PyCharm、 IntelliJFeedback!!!• ...原创 2019-08-30 23:00:39 · 188 阅读 · 0 评论 -
算法通关6-链表-1 实现单链表
文章目录1 顺序单链表2 逆序单链表1 Reverse Linked List 反转链表1.1 方法一:迭代1 顺序单链表定义结点/** * 定义结点 * */ public static class Node { int val; Node next; public Node(int val, Node next) { this.val = val;...原创 2019-09-20 08:45:10 · 228 阅读 · 0 评论 -
算法通关6-链表-2 反转链表
206 Reverse Linked List 反转链表来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-listReverse a singly linked list.Example:Input: 1->2->3->4->5->NULLOutput: 5->4-&...原创 2019-09-20 09:07:11 · 197 阅读 · 0 评论