《剑指offer》解题笔记
来源:互联网 发布:windows域账户登录 编辑:程序博客网 时间:2024/05/16 11:15
《剑指offer》解题笔记
《剑指offer》共50题,这两周使用C++花时间做了一遍,谨在此把一些很巧妙的方法、写代码遇到的难点、易犯错的细节等做一个简单的标注,但不会太过详细,具体算法还是请参考书本。
做的比较急,代码还有很多不完善的地方,如有错误,欢迎改正,地址为:github:sword_of_offer。可以使用git clone https://github.com/heLomaN/sword_of_offer.git
命令获取代码。
其中,少数无法验证正确与否的题目没有写代码,部分二叉树的题目写了代码,但由于生成二叉树太过麻烦没有验证。
解题笔记
Q3
声明并初始化二维数组的语句如何写?
cin如何判断输入结束?
Q4
字符数组的末尾位置计算差了1,忘了加上\0,要小心
Q5
递归的方法更简洁
Q6
stl的find算法
vector传值性能差,应该用引用
截取一段时要根据左右子树的长度来截,再次find是错误的
Q7
stack的pop返回值是void,而top方法才返回顶部值
Q8
这个二分相当的难。尤其是非递归的写法
边界值处理要仔细想
不能忽略如1 0 1的特殊情况
Q9
应该用long long类型
Q10
求数的二进制表示种1的个数应记住:减1再&自身总会消去一个1
Q11
除以2用>>,模2用&,效率更高
应该加上错误检测
Q12
遇到数字有关的题,首先考虑是不是大数问题
Q13
把下一个节点的值拷贝到当前节点即可,之后删除下一个节点
Q14
9du oj要求奇数或偶数的顺序不变,现在的代码没有符合这个要求
Q15
node *p,q
只把p声明为指针,小心
参考https://github.com/julycoding/The-Art-Of-Programming-By-July,*
应该靠近类型名
Q16
画图以帮助理解
Q18
!p判断指针为空是可以的
代码未测试
Q22
方法很难想起来,要仔细分析其中规律
Q25
代码未测试
Q26
方法很难想起来 第三步分离链表操作不够简洁
Q27
使用了一个辅助vector,书上的方法不能仔细的写出来
Q28
这种解法无法处理多个字符重复的情况,会造成重复
递归的时候修改全局数组,但递归调用后要把全局数组修改回来,和之前递归调用前后出入栈的方法有异曲同工之妙
8皇后问题也可以用这个方法解决
Q29
求数组中任意第K大的数字有成熟的O(n)的算法
Q30
C++中throw new excetion("error")是不正确的,不能用字符串初始化excetion
set和multiset是基于红黑树实现的
Q31
第一种解法和DP解法原理是一样的
Q32
1到n个9之间出现1的次数是n*10^(n-1)
代码未测试
Q33
itoa不是标准库函数,只是linux下的库函数,可以用printf代替
string可以直接+、>、<运算
Q34
关键是如何保证已经找到的丑数数组是有序的
Q35
memset函数是在cstring头文件中
Q35
关键是merge两个数组时的细节处理
归并排序相当于O(n)的空间换来了时间复杂度提升到O(nlogn)
Q37
代码未测试
Q38
关键是改变二分查找的循环判断条件
Q39
题目2的算法不易想起
代码未测试
Q40
方法很巧妙
C++中auto& e : v遍历容器注意v指向元素的引用才可以改变容器中的值
Q41
书中未给出算法证明,亟待解决
Q43
方法巧妙,解法很难想起来
Q45
方法巧妙,解法很难想起来
Q50
如果有指向父节点的指针,那么找到这两个点到根节点的链表,求第一个公共节点
如果没有,那么dfs遍历得到这两个点的链表,求第一个公共节点
- 《剑指offer》解题笔记
- 《剑指offer》解题笔记
- 牛客网 剑指offer解题笔记 (一)二维数组中的查找
- 剑指offer和leetcode解题报告
- 【剑指Offer】替换空格 解题报告
- 【剑指Offer】重建二叉树 解题报告
- 剑指Offer学习笔记
- 剑指Offer笔记
- 剑指offer笔记
- 《剑指offer》源码笔记
- 《剑指offer》学习笔记
- 【剑指offer】剑指offer 练习笔记
- 【剑指Offer】二维数组中的查找 解题报告
- 【剑指Offer】从尾到头打印链表 解题报告
- 【剑指offer-解题系列(1)】二维数组中的查找
- 【剑指offer-解题系列(2)】替换空格
- 【剑指offer-解题系列(4)】重建二叉树
- 【剑指offer-解题系列(9)】变态跳台阶
- JPEG图像的解压缩操作
- ZOJ 3811-Untrusted Patrol(DFS)
- 启动service的两种方式:startService与bindService的区别
- DM36x IPNC OSD显示中文 --- 基础知识篇
- Linux - mutt 参数详解
- 《剑指offer》解题笔记
- Endaga 的黑摩尔
- Highcharts 的安装和第一例子 (一)
- android动态按钮
- 《软硬件接口》课程大纲
- jq 常用
- 阅读《C陷阱与缺陷》的知识增量
- math函数
- liferay中资源文件下载