业务开发算法 50 讲 https://time.geekbang.org/column/intro/100100901?utm_campaign=geektime_search&utm_content=geektime_search&utm_medium=geektime_search&utm_source=geektime_search&utm_term=geektime_search&tab=catalog 有一些超级难的算法比如遗传算法,蚁群算法,看了数学建模国赛感觉好难写,那些人怎么写出来的? - 幼鹰 me 的回答 - 知乎 https://www.zhihu.com/question/345429819/answer/887625579 [LeetCode](LeetCode.md) [排序](排序.md) | 主题 | 子主题 | 具体内容 | 相关题目 | 备注 | | --------- | --------- | ------ | ------------------------- | ---------------------------------------------------------------------------------------------------------- | | 数组 | 一维 | 数组理论基础 | | | | | | | 有多少小于当前数字的数字 | | | | | | 3. 移除元素 | | | | | | 4. 有序数组的平方 | | | | | | 5. 长度最小的子数组 | | | | | |【网易】电影院选座 | | | | 摩尔投票法 | | 169. 多数元素 | JZ39 数组中出现次数超过一半的数字 | | | | | | 摩尔投票法对拼消耗 | | | for因子动态变化 | | 6. 螺旋矩阵II | JZ29 顺时针打印矩阵 | | | | | | 模拟过程(四边界 或 偏移量)| | | | | 7. 跳跃游戏 | 一格一更 | | | | | 8. 跳跃游戏II | 一步一更 | | | 前缀和 | | 剑指 Offer II 071. 按权重生成随机数 | 随机数 random.nextInt(n)[0,n) newDouble[0, 1.0) | | | | | 525. 连续数组 | | | | | | 剑指 Offer II 013. 二维子矩阵的和 | | | | | | lc303 | | | | | | lc304 | | | | 二维 | | 17. 用最少数量的箭引爆气球 | Integer.compare(o1[0],o2[0]),直接极小和极大作差会造成整型溢出 | | | | | 18. 无重叠区间 | Float.compare(a,b) | | | | | 20. 合并区间 | 二维数组排序,也是自定义比较器 | | | | | 19. 划分字母区间 | flag + 数组型哈希 | | | | | 7. 总结篇 | | | 字符串 | | | 1. 反转字符串 | | | | | | JZ58 左旋转字符串 | str.substring() | | | | | 2. 反转字符串II | | | | | | 3. 替换空格 | | | | | |【百度】for循环的嵌套层数 | 把一大段文本,逐行扫描,append成一个长字符串 | | | 考虑多情况处理流程 | | JZ67 把字符串转换成整数(atoi) | lc8. 字符串转换整数 (atoi) | | | | | | 011111111(+127) 11111111(-127) 00000000(0) 10000000 (-128) | | | kmp | | 6. 实现strStr()) | | | | | | 7. 重复的子字符串 | | | | | | 43. 字符串相乘 | int y = j >= 0? num2.charAt(j) - '0': 0; | | | | | 8. 总结篇 | | | 链表 | | | 1. 链表理论基础 | | | | | | JZ18 删除链表的节点 | dummy = new ListNode(-1) | | | | | BM11 链表相加(二)| 2. 两数相加 | | | | | 2. 移除链表元素 | | | | | | 3. 设计链表 | | | | | | 4. 翻转链表 | dummyNode | | | | | 5. 两两交换链表中的节点 | 按顺序连线 | | | | | JZ76 删除链表中重复的结点 | 82. 删除排序链表中的重复元素 II | | | | | | cur.next!= null前面一定要有cur!= null | | | | | JZ6 从尾到头打印链表 | | | | | | 14. 根据身高重建队列 | 链表定点添加 | | | | | 9. 总结篇 | | | 集合 | | |【美团】字母数 | | | 有序集合 | | |【美团】集合问题 | | | 哈希表 | | | 1. 哈希表理论基础 | | | | | | JZ35 复杂链表的复制 | 需要储存映射关系以备使用的时候就用哈希表 | | | 数组即可胜任 | |【5.1】修改大小写 | | | | | | JZ50 第一个只出现一次的字符 | ref.keySet().contains(x) | | | | | 2. 有效的字母异位词 | | | | | | 3. 两个数组的交集 | | | | | | 4. 快乐数 | 取数值各个位上的单数操作 | | | | | 6. 四数相加II | 分为两组两数之和 | | | | | 7. 赎金信 | | | | 用哈希 | | 5. 两数之和 | JZ57 和为S的两个数字 | | | | | | 边放边搜,ref.containsKey(array[i]) | | | 不用哈希,用指针 | | 8. 三数之和 | 两个去重点 | | | | | 9. 四数之和 | | | 有序哈希表 | | | | TreeMap按照key的大小,LinkedHashMap按照key加入的时间 | | 哈希+双向链表 | | | 146. LRU 缓存 | | | 双哈希 | | | 460. LFU 缓存 | 排行榜的场景,重写compareTo、equals、hachcode。ts默认是从左到右升序 | | 栈与队列 | | | 2. 用栈实现队列 | | | | | | 3. 用队列实现栈 | | | | | | JZ31 栈的压入、弹出序列 | | | | | | 4. 有效的括号 | | | | | | lc32. 最长有效括号 | 栈中存下标 先标记再统计 | | | | | 71. 简化路径 | 根目录退无可退,deque出口均在前first,split会出现""元素 | | | | |【腾讯】压缩算法 | 转义字符 | | | | | 5. 删除字符串中的所有相邻重复项 | | | | | | 155. 最小栈 | 随时序变化的每一刻都记录,才能倒退回去 | | | | | 3. 二叉树的迭代遍历 | 迭代法 - 自己压栈弹栈 | | | | | 6. 逆波兰表达式求值 | | | 单调队列/滑动窗口 | | | 7. 滑动窗口最大值 | JZ59 滑动窗口的最大值 | | | | | | 普通队列实现滑动,单调性维护窗口内秩序 | | | | |【美团6.1】小团的装饰物2 | | | 单调栈 | | | 1. 每日温度 | 数组初始化默认值都为0,可以利用哦!| | | | | 2. 下一个更大元素I | | | | | | 3. 下一个更大元素II | | | | | | JZ30 包含min函数的栈 | 两个Integer比较要用equals,它不会自动拆箱 | | | | | 4. 接雨水 | | | | | | 5. 柱状图中最大的矩形 | | | | | |【腾讯】逛街 | 反向遍历 | | 堆(优先队列)| 大根堆 | | 面试题 17.14. 最小K个数 | | | | | |【美团】晋级人数 | | | | | |【美团】搭配出售 | 多维度考量的时候转为贪心思想,动态最大的情况用堆处理 | | | 小根堆 | | 8. 前K个高频元素 | o1-o2是小根堆 | | | | |【美团10.3】公司食堂 | | | | | | JZ41 数据流中的中位数 | 比较器、lambda表达式 | | 二叉树 | | | 35. 二叉树总结篇 | | | | BFS | | 5. 二叉树的层序遍历 | JZ32 从上往下打印二叉树 | | | | | | 循环队列的思想 | | | | |【京东】紧急疏散 | | | | | | 17. 找树左下角的值 | | | | | | JZ77 按之字形顺序打印二叉树 | JZ78 把二叉树打印成多行 | | | | | | Collections.reverse() | | | | | JZ37 序列化二叉树 | | | | preOrder | | 前序 | 2. 二叉树的递归遍历 | | | | | | 递归法 - java方法的栈机制 | | | | | 6. 翻转二叉树 | JZ27 二叉树的镜像 | | | | | 8. 对称二叉树 | 100. 相同的树 | | | | | | 双线同时先序遍历 | | | | | 22. 合并二叉树 | | | | inOrder | | 中序 | | | | | | JZ8 二叉树的下一个结点 | | | | | | 19. 从中序与后序遍历序列构造二叉树 | 划分左右区间的递归问题,注意右区间索引的复杂性。| | | postOrder | | 后序 | 4. 二叉树的统一迭代法 | | | | | 9. 二叉树的最大深度 | JZ55 二叉树的深度 | | | | | | 左右比较后传值给根 | | | | | 10. 二叉树的最小深度 | 左右孩子都为空的节点才是叶子节点 | | | | | 11. 完全二叉树的节点个数 | | | | | | 12. 平衡二叉树 | JZ79 判断是不是平衡二叉树 | | | | | 16. 左叶子之和 | | | | | | 27. 二叉树的最近公共祖先 | JZ86 在二叉树中找到两个节点的最近公共祖先 | | | D | | JZ26 树的子结构 | \|\|控制的遍历递归 | | | D | | JZ13 机器人的运动范围 | 数位和,深度优先写的时候靠几个分叉控制(只写首层的广度)| | 二叉搜索树 | | | 23. 二叉搜索树中的搜索 | | | | | | 24. 验证二叉搜索树 | 前驱pre节点的初始化 | | | | | 25. 二叉搜索树的最小绝对差 | | | | | | 26. 二叉搜索树中的众数 | pre节点初始化、flag刷新思想 | | | | | JZ33 二叉搜索树的后序遍历序列 | 不要必须落入顺序数组的俗套中,一切从基本性质出发 | | | | | 29. 二叉搜索树的最近公共祖先 | JZ68 二叉搜索树的最近公共祖先 | | | | | 30. 二叉搜索树中的插入操作 | | | | | | 31. 删除二叉搜索树中的节点 | | | | | | 32. 修剪二叉搜索树 | | | | | | 33. 将有序数组转换为二叉搜索树 | | | | | | 34. 把二叉搜索树转换为累加树 | | | | | | JZ54 二叉搜索树的第k个节点 | if(root == null \|\| res!= null) return false; root为null是到底停止的条件,res不为null是完成任务的停止条件,至于返回值,只是个信息,可以用也可以不用 | | 图 | | | | | | | DFS | |【美团】小美的美丽树 | | | | | | 200. 岛屿数量 | | | | | |【ZOOM】树结点染色计算总体权重 | | | | | |【米哈游】树的连通块 | 不要看到树就以为是二叉树,按有向图(多叉树)做 | | | | | 797. 所有可能的路径 | | ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F12%2F28%2F23-16-43-68b614e91f9deb1af6444510e3151240-202412282316683-574018.png)