剑指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. bat命令运行java程序

    注意空格 本文主要介绍在window下bat批处理文件调用java的方法. @echo off echo 正在加密,请稍后....echo path:%~dp0 set base=%~dp0 set ...

  2. matplotlib绘制饼状图

    源自http://blog.csdn.net/skyli114/article/details/77508430?ticket=ST-41707-PzNbUDGt6R5KYl3TkWDg-passpo ...

  3. docker——容器(container)

    容器相关命令一览表: docker create docker run docker start/stop/restart docker attach/exec docker rm docker ex ...

  4. JQuery可以轻松实现数字框

    如果使用JQuery,则可以轻松实现数字框. <input type="text" name="name" value="0" run ...

  5. PKU 2155 Matrix(裸二维树状数组)

    题目大意:原题链接 题意很简单,就不赘诉了. 解题思路: 使用二维树状数组,很裸的题. 二维的写起来也很方便,两重循环. Add(int x,int y,int val)表示(x,y)-(n,n)矩形 ...

  6. ruby中的方法查找

    ruby中的方法调用都是 对象.方法 的形式,那么对象如何找到这个方法呢? 首先必须了解祖先链的概念,祖先链就是从一个类开始,到它的父类,再到父类的父类...一直到最终的起点(ruby中是BasicO ...

  7. Python的幂运算

    直接用例子说明

  8. 如何建立DB2分区数据库?(转)

    欢迎和大家交流技术相关问题:邮箱: jiangxinnju@163.com博客园地址: http://www.cnblogs.com/jiangxinnjuGitHub地址: https://gith ...

  9. ios 常见问题解决 以及小技巧

    1.使用cocoaPods引用第三方类库,报错:file not found   . 解决方案:设置 Project->Info->Configurations之后  clear ,然后再 ...

  10. PHP分页及原理

    在看本文之前,请确保你已掌握了PHP的一些知识以及MYSQL的查询操作基础哦. 作为一个Web程序,经常要和不计其数的数据打交道,比如会员的数据,文章数据,假如只有几十个会员那很好办,在一页显示就可以 ...