前言
不知不觉就结束了自己的秋招之路,虽感觉有些艰辛但是收获很多。找工作那段时间做了很多学习笔记,这是数据结构与算法相关的一部分笔记,这一块除了复习相关教科书,还有就是刷LeetCode和《剑指offer》了。
这段时间稍微空闲些,打算把自己之前在印象笔记上做的笔记迁移到CSDN上,供大家学习交流,自己之前也从网上学习了很多,算是回馈一下技术社区吧~
喜欢本博客的同学欢迎给博主打赏(微信扫描下方赞赏码)或是点赞,给予我更大的动力,谢谢大家的支持♪(・ω・)ノ
将印象笔记保留格式迁移到CSDN的艰辛历程
2018年12月10日注:直接复制笔记到CSDN格式会乱,想到可以复制导出的html源码,但是CSDN解析html源码的功能还没加上去,已经反馈了这个问题,我要再等等这个功能,免得要过多的二次编辑。
2018年12月23日注:利用周末时间先写个提纲在这里,后面再补充链接。
2019年1月5日注:看了很多相关的帖子,了解到CSDN应该不会再开放html源码编辑的功能,所以不再指望。后来灵机一动,可以先把笔记弄到博客园(支持html源码)上,再博客搬家过来就可以了。就利用周末两天时间把自己的刷题笔记通过html源码发布到了博客园上,格式一模一样,完美~~ 然后申请了博客搬家,等待审核……
2019年1月8日注:CSDN博客搬家未成功,目前这个功能还有问题。已经反馈了这个问题,等待官方修复中……
2019年1月9日注:晚上在看博客的时候,惊喜的发现搬过来54篇(博主在博客园上总共有138篇左右),粗略看了一下,格式基本保留了,不过有些细节还是丢失了,比如高亮、代码背景等等,丑了很多,不管怎样,反馈的问题得到了及时解决,还是要给CSDN点赞的,剩下的文章继续等待中……
2019年1月11日注:再来看看搬家的情况,搬过来123篇,还有十几篇没搬过来(带图片的都没有搬过来),晚上有点睡不着正好链接下这篇博客中的目录,链接了搬过来的123篇,余下的看搬不搬过来吧到时候再说,有点晚了,去睡了~~
2019年1月13日注:等了几天都没有变化了,看来是移不过来了,把没搬过来的十几篇链接成博客园的地址算了。然后还遇到一个问题就是搬家过来的文章都没有分类,而且不能批量给这123篇文章加类别,只能一个一个加(而且试了一下,进入编辑界面,加了分类,然后格式又乱了。。。)。还遇到一个问题是本来想弄个专栏的,但是不能批量添加未分类的文章,只能一个一个添加,已经反馈了不能批量添加分类的问题,等待官方修复这个问题……
总的来说这篇汇总已经完成了,整理笔记的工作就告一段落了~~专栏目前只收录了这篇汇总文章,看分类的问题能不能被解决再说……
刷题概况
博主刷完了《剑指offer》上的所有题目,大概70道左右,leetcode上总共有800多道题(一直在补充),博主刷了大概150道左右,对于找工作来说,这个题量差不多了,具体题量根据个人情况而定吧。《剑指offer》和LeetCode有很多类似的题,对应关系会在笔记中看到。对于LeetCode,自己之前也遇到过不知道重点刷哪些题的疑惑,后来发现官方整理了一些高频题的专栏——Top Interview Questions,我主要是刷的这三个专栏(有easy、medium、hard三个等级)上的题,上面分类整理了一些质量比较高比较经典的题,刷完很有收获,当然也结合自己的情况额外刷了一些专项练习来强化训练,比如动态规划等等。
推荐资源
- 牛客网《剑指offer》刷题链接
- LeetCode刷题链接
- LeetCode All in One 题目讲解汇总(作者Grandyang刷完了leetcode几乎所有题目,刷了800+,而且笔记整理的十分认真,太牛了~~ 博主在刷leetcode过程中有多次参考Grandyang的博客,在此表示感谢)
- 《剑指offer》,何海涛,电子工业出版社
- 《数据结构》,邓俊辉 ,清华大学出版社
- 《算法导论》 ,Thomas 等,机械工业出版社
- 《算法导论》MIT视频公开课(配套课件见资料)
刷题目录
为了方便自己复习,我是按照类别来整理笔记的,同一题目的不同变形版本也放在一起可供比较(整理成系列)。中文题目为《剑指offer》上的题目,英文为leetcode上的,下面是所有题目(还包括一些整理的相关知识点笔记)的目录,方便大家查找:
(先把目录放在这里,后面在花时间把内容链接上)
熟悉OJ平台
数组:
- 1 Two Sum(系列)
- 57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)
- 3Sum(系列) + 4sum
- Contains Duplicate
- 3 数组中重复的数字(287. Find the Duplicate Number)
- 26 Remove Duplicates from Sorted Array
- 39 数组中出现次数超过一半的数字
- 53 数字在排序数组中出现的次数
- 旋转数组(189. Rotate Array)
- Intersection of Two Arrays(系列)
- 228. Summary Ranges
- 66 构建乘积数组(cnblogs)
- 21 调整数组顺序使奇数位于偶数前面
- 61 扑克牌中的顺子
- 45 把数组排成最小的数
- 51 数组中的逆序对
- Increasing Triplet Subsequence
- Plus One
- Move Zeroes
- Valid Sudoku
- Rotate Image
矩阵
- 4 有序矩阵中的查找( 74. Search a 2D Matrix )(系列)
- 29 顺时针打印矩阵(54. Spiral Matrix)(系列)
- Kth Smallest Element in a Sorted Matrix
- Set Matrix Zeroes(cnblogs)
位运算
特殊数与数位
- 204. Count Primes
- 263. Ugly Number(系列)
- 43 1~n整数中1出现的次数 (233. Number of Digit One )
- 44 数字序列中某一位的数字(400. Nth Digit)
字符串
- 50 第一个只出现一次的字符(387. First Unique Character in a String)
- 5 替换空格
- Reverse String
- Reverse Integer
- 58 翻转字符串(翻转单词与左旋转字符串)
- 67 把字符串转成整数
- String to Integer (atoi)
- Implement strStr()(cnblogs)
- 38 字符串的排列(全排列问题)
- Longest Common Prefix(cnblogs)
- Valid Parentheses(括号对)(cnblogs)
- Valid Palindrome(回文词系列)
- Longest Palindromic Substring
- 242. Valid Anagram (变位词系列)
- 48 最长不含重复字符的子字符串(3. Longest Substring Without Repeating Characters)
- Count and Say
- 19 正则表达式匹配(hard,了解即可)
- 20 表示数值的字符串(了解即可)
栈和队列
- 9.1 用队列实现栈(225. Implement Stack using Queues)
- 9.2 用栈实现队列(232. Implement Queue using Stacks)
- 30 包含min函数的栈(155. Min Stack)
- 31 栈的压入、弹出序列
- 59 队列(滑动窗口)的最大值
链表
- 14 反转链表 206. Reverse Linked List(系列)
- 6 从尾到头打印链表
- 18 删除链表中的结点(237. Delete Node in a Linked List)
- 22 删除链表中倒数第k个结点(19. Remove Nth Node From End of List)(cnblogs)
- 52 两个链表的第一个公共结点(Intersection of Two Linked Lists)
- 23 有环链表问题-链表中环的入口结点(141. Linked List Cycle)
- 25 合并两个排序的链表(系列)(21. Merge Two Sorted Lists)
- 35 复杂链表的复制(138. Copy List with Random Pointer)
- Add Two Numbers
- 328. Odd Even Linked List
- Palindrome Linked List
树
- 二叉树的遍历总结(前序、中序、后序、层序、 之字形层序、垂直序)
- 二叉查找树的查找、插入、删除
- 68 树中两个节点的最低公共祖先
- 104. Maximum Depth of Binary Tree
- 110. Balanced Binary Tree
- 28 对称二叉树(101. Symmetric Tree)
- 27 二叉树的镜像
- 26 树的子结构(572. Subtree of Another Tree)
- 34 二叉树中和为某一值的路径(112. Path Sum)
- 124. Binary Tree Maximum Path Sum
- 37 序列化二叉树(297. Serialize and Deserialize Binary Tree)(cnblogs)
- 7 重建二叉树(系列)
- Validate Binary Search Tree
- 36 二叉搜索树与双向链表
- 33 判断某序列是否为二叉搜索树的后序序列
- Kth Smallest Element in a BST(cnblogs)
- Convert Sorted Array to Binary Search Tree(cnblogs)
- Populating Next Right Pointers in Each Node
- 8 二叉树中序遍历的下一个结点
查找与排序
- 二分查找小结
- 40 最小的k个数(对应Kth Largest Element in an Array)
- 41 数据流中的中位数(295. Find Median from Data Stream)
- Median of Two Sorted Arrays
- Merge Sorted Array
- 33 Search in Rotated Sorted Array(系列)(cnblogs)
- 11旋转数组的最小数字(153. Find Minimum in Rotated Sorted Array)(系列)
- Search for a Range
- Find Peak Element
- First Bad Version
- Sort Colors(cnblogs)
- Top K Frequent Elements
- Merge Intervals(cnblogs)
- Wiggle Sort(系列)
动态规划与贪婪法
- 70 Climbing Stairs
- 14 剪绳子
- 剑指Offer-46:把数字翻译成字符串
- 42 连续子数组的最大和(53. Maximum Subarray)
- Maximum Product Subarray
- 《算法导论》动态规划、贪婪法与分治法ppt
- 47:礼物的最大价值
- House Robber(系列)
- Unique Paths(系列)
- Longest Increasing Subsequence
- 121. Best Time to Buy and Sell Stock(系列)
- Jump Game(系列)
- Coin Change(系列)
- Burst Balloons
- Word Break(系列)
- 背包问题总结
回溯法和暴力枚举法
- 排列与组合
- 12 矩阵中的字符串查找(79. Word Search 系列)
- 13 机器人的运动范围
- Generate Parentheses
- Letter Combinations of a Phone Number
- Number of Islands
- Subsets(系列)