《剑指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遍历得到这两个点的链表,求第一个公共节点

  

转载请注明作者:Focustc,博客地址为http://blog.csdn.net/caozhk,原文链接为点击打开

《剑指offer》解题笔记的更多相关文章

  1. 《剑指Offer》笔记(更新中)

    这几天为了找工作开始看<剑指offer>,到现在也大概浏览一遍了,前两天看作者博客中提到九度OJ,就去看了一下,发现上面有书上的题目,就想可以自己写代码练习一下,而不仅仅是看解题思路,毕竟 ...

  2. 刷《剑指offer》笔记

    本文是刷<剑指offer>代码中的学习笔记,学习ing.. 衡量时间和空间. 递归的代码较为简洁,但性能不如基于循环的实现方法.

  3. 剑指Offer整理笔记

    说在前面,本篇的目的是为了学习剑指offer,以及博客园的排版功能,并将文章排版得整洁得体. 梵蒂冈梵蒂冈地方官方

  4. 剑指Offer读书笔记(持续更新中)

    (1)定义一个空的类型,里面没有不论什么成员变量和成员函数,对该类型求sizeof,得到的结果是多少? 答案是1.空类型的实例中不包括不论什么信息,本来求sizeof应该是0,可是当我们声明该类型实例 ...

  5. 剑指offer 面试29题

    面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...

  6. 【剑指offer】删除链表中重复的节点,C++实现(链表)

    0.简介       本文是牛客网<剑指offer>笔记. 1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1-> ...

  7. 《剑指offer》刷题笔记

    简介 此笔记为我在 leetcode 上的<剑指offer>专题刷题时的笔记整理. 在刷题时我尝试了 leetcode 上热门题解中的多种方法,这些不同方法的实现都列在了笔记中. leet ...

  8. 【剑指Offer】合并两个排序的链表 解题报告(Python)

    [剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  9. 【剑指Offer】反转链表 解题报告(Python)

    [剑指Offer]反转链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

随机推荐

  1. C++中++i与i++效率比较

    解析: 在这里声明,简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案.首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单的用于增加一 ...

  2. MongoDB 在 Mac OSX 平台安装

    1.检查电脑是否安装 Homebrew(brew) 工具.如果没有安装,在终端执行下面命令. ruby -e "$(curl -fsSL https://raw.githubusercont ...

  3. Android中的一些小技巧

    这个是App判断是pad还是手机的代码: public boolean isTabletDevice() { TelephonyManager telephony = (TelephonyManage ...

  4. 讯飞语音唤醒SDK集成流程

    唤醒功能,顾名思义,通过语音,唤醒服务,做我们想做的事情. 效果图(开启应用后说讯飞语音或者讯飞语点唤醒) 源码下载 地址:http://download.csdn.net/detail/q48788 ...

  5. swift -类的定义及使用

    // // main.swift // ClassDemo-06 // import Foundation println("Hello, World!") //类的定义 Pers ...

  6. Linux 监测内存常用的工具sar free vmstat

    Linux 检测内存常用的工具sar free vmstat free 内存统计信息解释 total 内存总量used 内存使用的大小free 内存剩余大小shared 共享内存大小buffers 块 ...

  7. percona XTRADB Cluster 5.6在ubuntu安装

    installing-perconaXTRADB Cluster 5.6 in-ubuntu-13-10-wheezy First of all, I would recommend login as ...

  8. execve 系列函数

    exec系列函数(execl.execlp.execle.execv.execvp) 1带 p 的exec函数:execlp,execvp,表示第一个参数path不用输入完整路径,只有给出命令名即可, ...

  9. 老生常谈,HashMap的死循环(转)

    本文转自掘金占小狼:用于理解HashMap为什么线程不安全,不能用于并发. 地址就在下文: 问题 由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分 ...

  10. LibRec:一个实现推荐系统的Java库包

    LibRec是一个用于实现推系统 RS 的Java库包,实现推荐系统的两个经典问题: rating prediction(评分排行预测) 和 item ranking (项目排行),其内置了经典的机器 ...