剑指offer题目总结:  https://www.cnblogs.com/dingxiaoqiang/category/1117681.html

版权归作者所有,任何形式转载请联系作者。
作者:马孔多(来自豆瓣)
来源:https://www.douban.com/note/332117149/

(1)涉及的重要数据结构:
数组(一维,多维),链表,栈,队列,二叉树,无向图,散列,。。。

(2)涉及的重要算法技术:
贪心,动态规划,分治(递归),回溯(剪枝),搜索(广搜,深搜),。。。

刷题后的一些体会(以下说法不绝对):

1,一般来说,贪心的时间复杂度在O(n),空间复杂度是O(1) 或 O(n) 。
2,动规需要记录表(标记数组),时间复杂度经常是O(n^2),空间复杂度也通常是O(n^2) 。
3,回溯很常见,重点是确定何时找到一个解、何时退出、越界时如何处理;通常需要一个线性结构来保存前面的状态,以便回溯时使用。
4,如果贪心、动规等方法都行不通,通常就考虑搜索来解决。
5,线性时间复杂度一般通过贪心方法实现;有时候,需要借助HASH结构(如unordered_map)。
6,利用好栈(stack)!很多问题通过栈能够在O(n) 时间内解决。
7,深度优先搜索一般是递归的,数据过大时,递归深度太大出现问题;广度优先搜索一般借助队列,一般不需要递归。
8,初始化数组时,memset(address, value, n_bytes) (包含在cstring.h) 是针对“字节”赋值!所以除非是单字节元素,或者初值为0或者-1,否则不要用memset 初始化;使用vector 比较方便。
9,必要时,使用unordered_map, unordered_set 等C++ 容器。
10,必要时,利用类变量简化传参。
11,动规的关键是找到转移方程;因此动规的子问题具有“累积”性质。
12,贪心不同于动规,贪心的子问题不是“累积性“,而是具有“决定性”。
13,写代码最重要的是思路清楚、可理解性,而不是纠结变量少、代码短等无关紧要的问题。
14,由于单链表只能从前向后遍历,因此操作时经常需要保存所关心结点的前趋结点。
15,处理链表要时刻注意检查空指针NULL。
16,数组检索、定位快;链表插入、删除快(不需要移动数据)。
17,vector, string 的性质都倾向于数组;List 的性质倾向于链表。
18,二叉树问题的基础是遍历方法:前序/中序/后续,递归与非递归都很重要。
19,关于二叉树的问题,有些是自顶向下的;也有些是自底向上的,如检查平衡二叉树。通常这两类问题都可以通过递归、非递归两种方法解决。
20,二叉树非递归遍历:前序遍历最简单,当前结点没有左儿子时,栈顶就是下一个结点;中序遍历需要先将当前结点(顶点)入栈,当前结点没有左儿子时,访问栈顶,并且栈内结点的头一个非空右儿子是下一个结点;后序遍历最后访问根结点,所以,顶点不仅要入栈,而且要记录是否访问了它的右儿子,只有访问了顶点的右儿子之后才能访问它自己。
21,许多问题需要应用二叉树遍历方法,有些问题需要在结点入栈的同时保存当前状态(如求最长路径)。
22,二叉树Level 遍历的本质是广度优先搜索,需要利用队列。
23,关于”图“,LeetCode 只有一道遍历题目,需要到其他地方补充一下。
24,有些方法虽然AC 了,但并不一定是最优美的。

参考文献:https://www.douban.com/note/332117149/

代码题 — 剑指offer题目、总结的更多相关文章

  1. 代码题 — 剑指offer题目、新增题目

     1.剪绳子 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]*k[1]*...*k[m] ...

  2. 剑指offer题目系列三(链表相关题目)

    本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...

  3. 再来五道剑指offer题目

    再来五道剑指offer题目 6.旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...

  4. 【剑指Offer】剑指offer题目汇总

      本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 剑指offer题目java实现

    Problem2:实现Singleton模式 题目描述:设计一个类,我们只能生成该类的一个实例 package Problem2; public class SingletonClass { /* * ...

  7. [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers

    引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...

  8. 剑指offer题目系列二

    本篇延续上一篇,介绍<剑指offer>第二版中的四个题目:从尾到头打印链表.用两个栈实现队列.旋转数组的最小数字.二进制中1的个数. 5.从尾到头打印链表 题目:输入一个链表的头结点,从尾 ...

  9. 剑指offer题目系列一

    本篇介绍<剑指offer>第二版中的四个题目:找出数组中重复的数字.二维数组中的查找.替换字符串中的空格.计算斐波那契数列第n项. 这些题目并非严格按照书中的顺序展示的,而是按自己学习的顺 ...

随机推荐

  1. SDUT1607:Number Sequence(矩阵快速幂)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1607 题目描述 A number seq ...

  2. Way to tmux

    1. tmux ls: 显示所有会话(OR: Ctrl-b s)2. tmux new -s session-name: 新建会话3. 可以简单地输入tmux a命令,这样可以接入第一个可用的会话:t ...

  3. 微信小程序组件toast

    操作反馈toast:官方文档 Demo Code: var toastNum = 2 var pageData = {} pageData.data = {} for(var i = 0; i < ...

  4. 手机端1px细线公共类

    手机端1px细线公共类 .borderBottom1px{ position: relative; } .borderBottom1px:after{ content: ""; p ...

  5. android studio 模拟器中文乱码

    这是因为编码格式不统一导致的,在android studio的build.gradle加入默认编码声明就可以了 compileOptions.encoding = "GBK" 参考

  6. 漂亮的输出-----prettytable和colorama的使用

    Python通过prettytable模块将输出内容如表格方式整齐输出,python本身并不内置,需要独立安装该第三方库. 1 pip install PrettyTable 1 #源码安装 2 wg ...

  7. Oracle查询一个表的数据插入到另一个表

    1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: insert ...

  8. DispatcherServlet讲解

    1.1.1.DispatcherServlet作用DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring I ...

  9. [转][修]利用matlab绘制地图上的点、线、面

    一.绘制点 %生成背景地图地图   h = worldmap('France'); %读取和显示大陆架   landareas = shaperead('landareas.shp','UseGeoC ...

  10. 几种创建XMLHttpRequest对象的方法

    XMLHttpRequest对象,也就是Ajax交互的核心对象. 这里列举三种创建Ajax对象的方法. 第一种: <!DOCTYPE html> <html> <head ...