链表
题目 难度 简要思路梳理
[剑指offer]-从尾到头打印链表 即链表逆序,如果不能改变原始链表结构,可用栈
[剑指offer]-链表中倒数第K个节点 双指针法
[剑指offer]-合并两个排序的链表 先获取新链表头(两链表最小的头),然后按照递增方式连接,最后将某一个剩余一段的链表直接接上。
[剑指offer]-复杂链表的复制 ☆☆☆ 细心!!分三步:1,复制每个节点,插在其后;2,复制每个旧节点的random到新节点;3.拆分节点。
[剑指offer]-圆圈中最后剩下的数 ☆☆☆ 约瑟夫环问题,采用STL中的list构成环形链表。
队列和栈
题目 难度 简要思路梳理
[剑指offer]-用两个栈实现队列 模拟队列先进先出,一个栈存数据,另一个栈临时放数据。
[剑指offer]-包含min函数的栈 设置两个栈,一个存放数据,一个存放每一步数据栈中最小的数。
[剑指offer]-栈的压入、弹出序列 ☆☆☆ 用一个栈来模拟压入弹出操作。

题目 难度 简要思路梳理
[剑指offer]-重建二叉树 ☆☆☆ 采用递归的方式不断找出根节点和左右子树
[剑指offer]-树的子结构 ☆☆☆☆ 第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。
[剑指offer]-二叉树的镜像 ☆☆ 先交换根节点的左右子节点,再将子节点作为根节点进行递归镜像操作。
[剑指offer]-从上往下打印二叉树 根节点入队列,然后出队列,出队时将其左右孩子入队,循环操作进行队列出队,每次出队将其左右孩子入队。当队列为空时,整棵树层序遍历完毕。
[剑指offer]-二叉搜索树的后序遍历序列 ☆☆ BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义。
[剑指offer]-二叉搜索树与双向链表 ☆☆ 改造中序遍历,设置一个pre和cur,将中序遍历打印的过程替换为前后连接pre和cur
[剑指offer]-二叉树深度 采用尾递归的方式
[剑指offer]-判断树是否为平衡二叉树 ☆☆ 性质:是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 因此递归函数每次要计算出子树的高度。
数组
题目 难度 简要思路梳理
[剑指offer]-二维数组的查找 从右上角到左下角进行查找
[剑指offer]-旋转数组的最小数字 ☆☆☆ 采用分治的思想,递归地将数组进行二分区,然后找到最小的数(时间复杂度logn 顺序查找O(n))
[剑指offer]-斐波那契数列 很简单,考虑节省空间复杂度,用循环代替递归。
[剑指offer]-调整数组顺序使奇数位于偶数前面 用两个指针,一个遍历数组,一个指向存放奇数的位置,都从0开始,偶数暂时放在另一个vector中,先将奇数存放在奇数指针指向的位置,最后再存偶数。
[剑指offer]-顺时针打印矩阵 ☆☆ 考虑全面:m×n,m×1,1×n,1×1几种情况都要考虑;流程控制采用top、down、left、right四个变量来控制。
[剑指offer]-数组中出现次数超过一半的数字 ☆☆ 在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1。遍历结束后,所保存的数字即为所求。
[剑指offer]-最小的K个数 TOPk问题
[剑指offer]-在排序数组中查找数字 ☆☆ 考虑查找效率,总体思路是找到第一个K位置和最后一个K的位置,作差加一求出个数。可以采取递归方式二分查找,也可直接通过循环二分查找,不过大神的通过查找K-0.5和K+0.5更加简洁高效。
[剑指offer]-数组中只出现一次的两个数字 ☆☆ 先将所有数依次异或,结果和两个单一数异或相同,从右开始找到结果中第一个为1的位,以此为标准将数分成两类,再将两类分别异或,得到的就是两个单数。注意大坑!!! a & flag != 0;和(a & flag) !=0;结果不同。
[剑指offer]-和为S的连续正数序列 ☆☆ 用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2。如果从small到big的序列的和大于s,则可以从序列中去掉较小的值,也就是增大small的值。如果从small到big的序列的和小于s,则可以增大big,让这个序列包含更多的数字。因为这个序列至少要有两个数字,我们一直增加small到(1+s)/2为止。
[剑指offer]-和为S的两个数字 ☆☆ 类似与57(2).和为S的连续正数序列.note做法,只不过,只不过本题左指针开始指向数组最左端,右指针指向最右端。
[剑指offer]-扑克牌顺子 ☆☆ 第一步:排序;第二步:统计0的个数,统计间隙的个数;第三步:间隙数大于0个数返回false,间隙数小于0的个数,更新0的个数,继续统计后面的数字是否有间隙。同时在此过程中也要统计前后两个数是否有重复情况,重复返回false。
[剑指offer]-数组中重复的数字 ☆☆ 从头到尾依次扫描数组元素,当扫描到第i个元素m时,当m等于i时,继续遍历下一元素,当不等于i时,则拿他与第m个数n比较,如果m=n,则找到重复元素,返回true,否则交换两元素...
[剑指offer]-构建乘积数组 ☆☆ 求B[i]的时候分为两步,先求左侧所有的A相乘,再求右侧的所有的A相乘,最终将两者相乘即得相应的B。具体通过两次循环,累乘得到不同的B[i]
位运算
题目 难度 简要思路梳理
[剑指offer]-不用加减乘除做加法 ☆☆ a^b代表不进位的二进制加法,(a&b)<<1为二进制加法所有的进位信息,然后通过循环或者递归,直到进位为0。 扩展题:不使用新的变量,交换两个变量的值
字符串
题目 难度 简要思路梳理
[剑指offer]-二进制中1的个数 要考虑到负数这种情况,右移数还是左移相与的数?
[剑指offer]-字符串的排列 ☆☆ 采用递归回溯的方式实现,要考虑字符的重复,输出结果是否为字典序。
[剑指offer]-1~n整数中1出现的次数 ☆☆☆

设定整数点(如1、10、100等等)作为位置点i,求每个位置点为1时的数有多少个,再算出所有情况

//根据设定的整数位置,对n进行分割,分为两部分,高位n/i,低位n%i

[剑指offer]-把数组排成最小的数 ☆☆ 要会用数字转字符串函数 to_string(number1),会写sort()的cmp函数。
[剑指offer]-丑数 ☆☆☆ 一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z
[剑指offer]-第一次只出现一次的字符 ☆☆ 采用hash思想,用int map[256]统计字符串中字符的个数,然后从头遍历字符串,到map[256]中寻找对应值,如果为1,则返回。
[剑指offer]-字符流中第一个只出现一次的字符 ☆☆ 和上题类似,只是字符串S和map[256]作为类的成员变量,每次调用insert()函数时,从字符流中添加一个字符到S的结尾,同时,更新map[256]中对应位,findFirst()仍然按照字符串顺序,遍历map数组。
[剑指offer]-求1+2+…+n ☆☆ 采用递归代替循环,用&&代替if条件语句。
[剑指offer]-把字符串转换成整数 ☆☆

(1)字符串指针是否为空,字符串长度是否为0;

(2)考虑字符串的正负,正数要考虑带不带正号;

(3)确保除了符号位以外所有的字符必须都是0~9之间的几个字符,否则返回0.

  ☆☆☆ 分多种情况考虑,具体分析见链接
[剑指offer]-左旋转字符串 主要熟悉下string类的一些函数的操作2.16 C++ string类详解.note
[剑指offer]-替换空格 ☆☆ 在同一个字符数组中,通过两个指针进行空格和%20的替换。

[剑指offer]-导航总结篇相关推荐

  1. 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题

    [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 文章目录 [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 39. 数组中出现次数超过 ...

  2. 【LeetCode】《剑指Offer》第Ⅰ篇⊰⊰⊰ 3 - 11题

    [LeetCode]<剑指Offer>第Ⅰ篇⊰⊰⊰ 3 - 11题 文章目录 [LeetCode]<剑指Offer>第Ⅰ篇⊰⊰⊰ 3 - 11题 03. 数组中重复的数字(ea ...

  3. 剑指offer试题(PHP篇一)

    剑指offer试题(PHP篇一) 1.二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 ...

  4. 剑指OFFER思路总结与代码分享——树篇(Java实现)

    剑指OFFER树相关 55-1 二叉树的深度 27 二叉树的镜像 54 二叉搜索树的第K大节点 32-II 从上到下打印二叉树 07 重建二叉树 68-I 二叉搜索树的最近公共祖先 68-II 二叉树 ...

  5. 剑指offer刷题笔记-篇2

    文章目录 剑指offer 前言 机器人的运动范围 剪绳子 二进制中1的个数 数值的整数次方 从1到n的位数 移除链表元素 删除链表中重复的结点 *正则表达式匹配 *表示数值的字符串 调整数组顺序 链表 ...

  6. 算法题解(剑指Offer篇)

    文章目录 栈与队列(简单) *剑指 Offer 09. 用两个栈实现队列 - 12.27 剑指 Offer 30. 包含min函数的栈 - 12.27 链表(简单) *剑指 Offer 06. 从尾到 ...

  7. 【刷题】剑指Offer篇

    本文中的部分图片摘自相关题解榜主,如有侵权,请联系删除. 特别感谢k神在剑指Offer刷题路上提供的清晰图解.和堪称完美的思路与方法 小文目录: T3:数组中重复的数字 T3-2:不修改数组找出重复的 ...

  8. 二叉树代码 java面试题_《剑指offer》面试题39 二叉树的深度(java)

    摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就 ...

  9. 剑指offer(34-40题)详解

    文章目录 34 第一个只出现一次的字符 35 数组中的逆序数 36 两个链表的第一个公共节点 37 数字在排序数组中出现的次数 38 二叉树的深度 39 平衡二叉树 40 数组中只出现一次的数字 欢迎 ...

  10. 剑指Offer #12 数值的整数次方(快速幂)

    题目来源:牛客网-剑指Offer专题 题目地址:数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和 ...

最新文章

  1. 前端性能优化之DOM(三)
  2. VueX(Vue状态管理模式)
  3. python 元组捷豹_GitHub - jaguarzls/pyecharts: Python Echarts Plotting Library
  4. Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例
  5. python中定义变量为啥要用下划线_关于python中带下划线的变量和函数 的意义
  6. springcloud config配置中心概述
  7. android7.x版本编译framework.jar无效解决
  8. Android 代码混淆、Android Proguard(混淆)
  9. PCB工程师为你详解FPC排线及其用途
  10. 读书笔记之《史记》读后感心得体会
  11. 美团 2021 届秋季校园招聘笔试真题
  12. Swagger Error Missing required property: responses ✖ Swagger Error Additional properties not allowe
  13. linux上传oracle压缩包,Linux中从oracle官网下载jdk文件不是标准的gzip格式文件问题...
  14. 七夕节 看到很多停止更新的blog 莫名有点淡淡的忧桑
  15. IDEA Eval Reset 使用方法
  16. Game Plug-ins(1)
  17. 我,单身沪漂,想有只猫
  18. Android 程序员必须掌握的三种自动化测试方法
  19. 多目标学习在推荐系统中的应用
  20. C#设计模式——组合模式(Composite Pattern)

热门文章

  1. Python Selenium 疑难杂症解方(一):启动浏览器
  2. 大动作,天津农学院专升本停招了吗
  3. 解决 Chrome 浏览器跨域加载本地文件的问题
  4. linux 配置局域网内部www服务器,局域网内部邮件服务器搭建方法
  5. 云计算与网格计算的区别
  6. 和计算机相关的英文名字女孩,简单好听寓意好的英文名字女孩
  7. 终于不用早起抢菜了?GitHub 买菜插件出世开源了!
  8. hdu5855二分+最大流
  9. C语言基础and进阶——猜拳游戏(6个版本)
  10. 如何安装Aptana