皮皮的LeetCode刷题库

【剑指Offer】类型题目分类总结

2019-08-28  本文已影响0人  就问皮不皮

总结

到目前,自己结合牛客网,CSDN博客以及《剑指Offer》把《剑指Offer》这本书的主要题目过了一遍,其中程序的实现也是使用Java和Python。也发现一些问题:

  1. 相同的编程思想,有时使用Java实现后在牛客网能够通过测试,而Python不能通过,这可能是Java编译成字节码文件运行快一点吧2除此之外。

  2. Java中有很多的数据结构,例如栈Stack,Queue,LinkedList等数据结构,以及比较器Compartor等,当我们了解这些数据结构以及其特性之后,能够快速地编写程序,而对于Python的话可能一个list类型就可以代替上面很多数据结构,各有利弊,细分的数据结构可能在书写的时候代码较为臃肿,而Python可能一个数据类型涵盖太多,那么在书写程序的时候就需要更加细心。

  3. 这些题目考察知识点较多,其中不乏有字符串、数值、数组、栈、队列、二叉树,动态规划,分治,回溯等,要求有一定的数据结构和算法基础,这也是编程基本功的体现。

  4. 即使当前Java、Python都会集成有诸如排序算法、栈等算法和数据结构的封装和集成,但是如果对于一个想成为算法工程师的程序员,其内在的实现思想还是有必要知晓的,其可为我们解决其他问题提供很多思路,这也是我在做题时发现的,当然在一些问题中,我们也没有必要去自己收到实现排序算法以及一些数据结构,主要是领会算法的思想。

题目分类

以下根据个人经验以及参考网上资料把已经做过的题目分类汇总如下,需要说明的是一道题目可以有多种解法,分类也不唯一,具体题目还需要看个人理解:

LinkedList

【剑指Offer】从尾到头打印链表 (链表)

【剑指Offer】链表中倒数第K个结点 (链表)

【剑指Offer】反转链表 (链表)

【剑指Offer】链表中环的入口结点 (链表)

【剑指Offer】删除链表中重复的结点 (链表)

【剑指Offer】反转链表 (链表,数学)

【剑指Offer】两个链表的第一个公共结点(链表)

【剑指Offer】复杂链表的复制(链表)

【剑指Offer】合并两个排序的链表 (链表)

Tree

【剑指Offer】重建二叉树 (树)

【剑指Offer】树的子结构 (树)

【剑指Offer】二叉树的镜像(树)

【剑指Offer】从上往下打印二叉树 (树)

【剑指Offer】二叉搜索树的后序遍历序列(栈、树)

【剑指Offer】二叉树中和为某一值的路径(树)

【剑指Offer】二叉搜索树与双向链表(树、链表)

【剑指Offer】二叉树的深度 (树)

【剑指Offer】平衡二叉树(树)

【剑指Offer】二叉树的下一个结点(树)

【剑指Offer】对称的二叉树 (树)

【剑指Offer】按之字形打印二叉树 (树、栈)

【剑指Offer】把二叉树打印成行 (队列、树)

【剑指Offer】序列化二叉树 (树)

【剑指Offer】二叉树的第k个结点 (栈、树)

Stack & Queue

【剑指Offer】用两个栈实现队列(栈、队列)

【剑指Offer】包含min函数的栈 (栈)

【剑指Offer】栈的压入、弹出序列 (栈)

【剑指Offer】滑动窗口的最大值 (数组)

Heap

【剑指Offer】最小的k个数(堆)

HashTable

【剑指Offer】第一个只出现一次的字符(字符串)

【剑指Offer】矩阵中的路径 (数组)

【剑指Offer】机器人的运动范围 (数组)

具体算法-斐波那契数列

【剑指Offer】斐波那契数列(数组,动态规划)

【剑指Offer】旋转数组的最小数字(查找和排序)

【剑指Offer】覆盖矩阵(递归)

【剑指Offer】跳台阶(递归)

【剑指Offer】变态跳台阶(贪心,递归,循环)

具体算法-搜索算法

【剑指Offer】二维数组中的查找 (数组)

【剑指Offer】旋转数组的最小数字(查找和排序)

【剑指Offer】数字在排序数组中出现的次数 (数组)

具体算法-全排序

【剑指Offer】字符串的排列 (字符串)

具体算法-动态规划

【剑指Offer】连续子数组的最大和 (数组 )

【剑指Offer】正则表达式匹配 (字符串)

具体算法-回溯

【剑指Offer】矩阵中的路径 (数组)

【剑指Offer】机器人的运动范围 (数组)

具体算法-排序

【剑指Offer】最小的k个数(链表)

【剑指Offer】数组中的逆序对(数组)

具体算法-位运算

【剑指Offer】二进制中1的个数 (数组,位运算)

【剑指Offer】数值的整数次方 (数值)

【剑指Offer】数组中只出现一次的数字 (数组)

其他算法

【剑指Offer】字符串替换(字符串)

【剑指Offer】调整数组顺序使奇数位于偶数前面 (数组)

【剑指Offer】数组中出现次数超过一半的数字 (数组)

【剑指Offer】整数中1出现的个数 (数学,查找)

【剑指Offer】把数组排成最小的数 (数组)

【剑指Offer】丑数 (穷举)

【剑指Offer】和为S的连续正数序列(数值)

【剑指Offer】和为S的两个数字 (数值)

【剑指Offer】左右旋转字符串 (字符串)

【剑指Offer】扑克牌顺子(字符串)

【剑指Offer】求1+2+3+...+n(进制转化)

【剑指Offer】不用加减乘除做加法(进制转化)

【剑指Offer】构建乘积数组(数组)

【剑指Offer】反转单词顺序列 (字符串)

【剑指Offer】数据流中的中位数 (数值)

【剑指Offer】表示数值的字符串(字符串)

【剑指Offer】字符流中第一个不重复的字符 (字符串)

【剑指Offer】连续子数组的最大和 (数组 )

后记

以上也仅是个人总结,难免因为个人能力问题总结不到位,各位进凑合看看吧,哈哈。当然上面的题目也只是我们练手的基础,如果想有更进一步地提升,个人建议在业余时间可以去LeetCode等刷题平台去看看一些问题,思考如何解决,然后尝试编程,然后看能否再提高算法的性能,通过这些,一步一步,踏踏实实,我相信能够提高自己的编程能力,在将来面试中也会有有所裨益。当前LeetCode平台提供了比较好的刷题体验,具体大家可以去尝试,自己也在上面编程、学习和做笔记,真的能够锻炼一个人的思维,也不得不佩服那些大牛的奇怪解题思维,但是确实很好,自己也会把一些比较好的题目以及结合自己的思考书写分享出,感谢各位粉丝的支持,有问题可以留言,提建议哦!

个人订阅号

image
上一篇 下一篇

猜你喜欢

热点阅读