- 记录我每天学习的数据结构,春招的部分习题在码云
| 时间 | 学习内容 | 耗费时间 | 备注 |
|---|---|---|---|
| 2019-06-20 | 二叉树的构建和遍历 | 1天 | 树的构建 |
| 2019-06-23 | 哈夫曼树 | 2天 | |
| 2019-06-24 | 优先队列 | 2h | |
| 2019-07-15 | 反转链表 | 1h | |
| 2019-07-18 | 位运算 | 2h | |
| 2019-07-28 | 树的子结构 | 0.5h | 递归 |
| 2019-07-28 | 链表的倒数第k个节点 | 0.5h | |
| 2019-07-28 | 调整数组顺序使奇数位于偶数前面,奇数与奇数之间,偶数与偶数之间相对位置不变 | 0.5h | |
| 2019-07-28 | 合并有序链表 | 0.5h | 初始化合并后的链表节点 |
| 2019-08-22 | 最大公共字串 | 0.5h | 动态规划 |
| 2019-08-25 | 字符串的排列 | 0.5h | 递归算法 |
| 2019-08-30 | 众数 | 0.5h | 技巧 |
| 2091-08-30 | 连续子数组的最大和 | 0.5h | 数据结构经典算法 |
| 2019-08-30 | 二叉搜索树转化为双向链表 | 1.5h | 看不懂高分答案 |
| 2019-08-31 | 只出现一次的字符 | 0.5h | |
| 2019-08-31 | 选靓号 | 1h | |
| 2019-08-31 | 选择出现次数最高的字串 | 1h | 出现次数最高的字串就是出现次数最多的单个字符 |
| 2019-09-03 | 1到n中1出现的次数 | 0.5h | |
| 2019-09-03 | k点游戏 | 1h | 动态规划 |
| 2019-09-04 | 判断一棵树是否是二叉搜索树 | 1h | 生成树,递归,中序遍历 |
| 2019-09-04 | 判断一棵树是否是二叉平衡树 | 0.5h | 递归 |
| 2019-09-06 | 只出现一次的两个数 | 0.5h | |
| 2019-09-06 | 输入和为指定数的两个数 | 0.5h | |
| 2019-09-06 | 连续正整数和 | 1h | |
| 2019-09-07 | 反转字符串 | 1.5h | 对字符串的索引有误解和空格的处理 |
| 2019-09-10 | 扑克牌顺子 | 0.5h | |
| 2019-09-10 | 之字形遍历二叉树 | 0.5h | |
| 2019-09-11 | 0-1指派(动态规划) | 1h | vivo笔试第二题,如何分配资源最大化 |
| 2019-09-12 | 爬虫 | 1h | zhao_pin.py,如果域名中没有页面参数,动态更新时候分页爬取 |
| 2019-09-13 | 删除有序链表的重复节点(不保留重复节点) | 1h | |
| 2019-09-13 | 数组中所有数字组成的最小数字 | 1h | 思路:转化为字符串,按照拼接后的大小进行排序 |
| 2019-09-24 | 利用位运算进行加减乘除 | 0.5h | |
| 2019-09-25 | 两个链表的第一个公共节点 | 0.5h | |
| 2019-09-28 | 剪绳子 | 0.5h | |
| 2019-09-30 | 矩阵中的路径 | 1h | |
| 2019-10-02 | 表示数值的字符串 | 0.5h | |
| 2019-10-02 | 二叉树第k小的节点 | 0.5h | |
| 2019-10-06 | 字符串转整数 | 1h | 注意:整数的取值范围-0x80000000~0x7fffffff |
| 2019-10-06 | 二叉树的下一个节点 | 1h | 中序遍历的特点 |
| 2020-02-13 | 只出现一次的数 | 20min | 异或运算 &,,^, ~, <<, >> |
| 2020-02-13 | 直线上最多的点数 | 2h | 题目采取遍历,时间复杂度为O(N^2).感觉没有用到位运算的相关知识 |
| 2020-02-15 | 分数转小数 | 0.5h | divmod函数,如何确定循环小数的循环体?余数%10来判断 |
| 2020-02-15 | 阶乘以后的零 | 1h | 思路:只需要统计每个数分解因子中5的个数 |
| 2020-02-17 | 颠倒二进制数 | 0.5h | 主要利用左移、右移和与的位运算 |
| 2020-02-17 | 统计二进制中1的个数 | 20min | n&1=n的二进制位的最后一位 |
| 2020-02-17 | 计数质数 | 0.5h | 厄拉多塞筛法 |
| 2020-02-18 | 缺失数字 | 0.5h | 把该问题转换为只出现一次的数字,利用异或运算解决 |
| 2020-02-18 | 3的幂 | 0.5h | 思路一:整数的取值范围是-2^31~2^31-1; 思路二:math.log(n,3),注意需要进行四舍五入,math.log(243,3)=4.9999 |
| 2020-02-20 | 单词接龙 | 2h | 宽度优先搜索BFS: 层次遍历 |
| 2020-02-20 | 岛屿个数 | 2h | 并查集和深度优先遍历:递归 |
| 2020-02-22 | 构建二叉树 | 3h | 利用深度优先遍历,即递归构建左子树和右子树 利用队列先进先出的特性进行层次建树 |
| 2020-02-22 | 层次遍历 | 0.5h | 宽度优先搜索 |
| 2020-02-23 | 课程表 | 2h | 深度优先搜索--递归:判断是否存在环, 两种思路:1.删除入度为0的点,判断集合是否为空。2.利用递归深度遍历,判断每个点是否存在环 |
| 2020-03-03 | 课程表2 | 2h | 如何确定迭代的终止条件?字典删除后for key value in dic.items()会报错 |
| 2020-03-04 | 反转字符串 | 1h | 1.递归,2.双指针 |
| 2020-03-04 | 两两交换链表中的节点 | 2h | 递归--交换节点 |
| 2020-03-05 | 杨辉三角 | 1h | 1.递归输出杨辉三角矩阵,输出指定行的。2.动态规划 |
| 2020-03-05 | 反转链表 | 2h | 1.递归2.循环 |
| 2020-03-06 | 斐波拉数 | 0.5h | 递归 |
| 2020-03-06 | 爬楼梯 | 0.5h | 递归 |
| 2020-03-09 | 二叉树的最大深度 | 0.5h | 递归 |
| 2020-03-09 | power(x, n) | 1h | 折半,递归 三种解法 |
| 2020-03-09 | 合并两个有序链表 | 1h | 递归,循环,递归时注意两个节点元素相等的情况 |
| 2020-03-09 | 第k个语法符号 | 0.5h | 递归,相当于k-1的二进制含1的个数 |
| 2020-03-09 | 不同的二叉搜索树 | 1h | 递归,卡特兰数 |
| 2020-03-12 | 美团春招笔试 | 2h | 5道编程,AC1道,图论、动态规划、数组的和和概率 |
| 2020-03-17 | 美团笔试 | 4h | 如何求图中任意两个节点之间的距离,弗洛伊德算法 |
| 2020-03-20 | 全排列 | 1h | 递归 |
| 2020-03-21 | 对角矩阵 | 2h | 数组中隐藏的规律 |
| 2020-03-21 | 螺旋矩阵 | 3h | 一层一层加入,或者进行删除 |
| 2020-03-23 | 二进制求和 | 1h | 字符串 |
| 2020-03-23 | 最长公共前缀 | 1h | set和min(字符串列表)==最短的字符串 |
| 2020-03-29 | 数组拆分1 | 0.5h | 快速排序--分治、双指针和递归 |
| 2020-03-29 | 两数之和2 | 0.5h | 输入有序数组--输出满足指定数的索引,排序+双指针,小米面试 |
| 2020-03-29 | 移除元素 | 0.5h | 双指针--原地移除,一个快指针,一个慢指针 |
| 2020-03-29 | 最长连续1的个数 | 0.5h | 思路: 如果等于1,计数加一, 如果不等于,计数器为0, 在每一个元素都更新最大的连续1的个数, 保证到该步的连续1个数是最多的,参考代码 |
| 2020-03-29 | 长度最小的子数组 | 1h | 思路:先找一个最大长度的大于s的子数组,然后不断剔除其中的元素,并更新长度 |
| 2020-03-30 | 验证链表中是否存在环 | 1h | 思路:快慢指针, 快指针一次走两步,慢指针一次走一步, 如果存在环,快慢指针必定相遇, 如果没有环,快指针会直接走到尽头 |
| 2020-03-30 | 数组中连续子序列的和(正整数和负整数都有) | 0.5h | 思路:初始化和为0和-float(inf),遍历数组中的每个元素, 如果元素小于0,则让最大和等于该元素, 如果元素大于0,则让最大和加上该元素, 将最大和与上一个元素时的最大值进行比较 |
| 2020-03-31 | *移除有序数组中的重复元素 | 1h | 思路:双指针法,一个指针指向新的数组,一个指针指向原来的数组 |
| 2020-03-31 | 移除零 | 0.5h | 思路:双指针 |