随笔分类 -  算法

摘要:剑指OFFER 序列化二叉树 弄了半天在剑指OFFER OJ上无法通过(猜测可能是因为剑指OFFER上使用的是char类型的指针,导致有一些编译的不一致问题),同样的代码在leetcode上通过了 代码 采用的先序遍历的方式,先写序列化的代码,就是先序遍历一遍,遇到结点就记录到res中. 反序列化稍 阅读全文
posted @ 2020-01-26 20:55 virgil_devil 阅读(114) 评论(0) 推荐(0)
摘要:剑指OFFER 数字在排序数组中出现的次数 题目描述 统计一个数字在排序数组中出现的次数。 利用排序特性解法 阅读全文
posted @ 2020-01-26 16:52 virgil_devil 阅读(102) 评论(0) 推荐(0)
摘要:剑指OFFER 数组中的逆序对 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 解题思考记录 初看这道题,马上想到了暴力解法,就是一个 阅读全文
posted @ 2020-01-26 13:51 virgil_devil 阅读(211) 评论(0) 推荐(0)
摘要:剑指OFFER 反转链表 分析 在原来的链表上进行反转空间复杂度O(1),稍加思考可知道最少需要三个指针,那么先处理常规的情况(结点数大于等于3个),其中该情况又要分别处理头中尾三种情况 最后慢慢处理特殊情况(结点数1个,结点数2个),然后写出代码 总结 头脑要保持清醒,指针不要弄混了 阅读全文
posted @ 2020-01-26 09:41 virgil_devil 阅读(105) 评论(0) 推荐(0)
摘要:剑指OFFER 二叉树的深度 这道题用深搜或者宽搜都可以完成,这里我就直接用深搜了. 思路 代码上让depth每进一个左孩子/右孩子便使深度+1,离开的时候再深度 1来保证depth记录当前深度. 得到depth实时记录当前遍历到结点的深度后,设置一个max_depth保留最大的深度值. 代码 阅读全文
posted @ 2020-01-25 21:47 virgil_devil 阅读(98) 评论(0) 推荐(0)
摘要:剑指OFFER 矩形覆盖 题目描述 分析 一般我们遇到这种看起来计算量很大似乎需要穷举的时候,都会测试一下是否满足动态规划的条件. 测试时先假设满足该问题满足最优子结构 我们先手动算出n=1,2,3,4,5的答案以便对我们的推理进行验证 | 被覆盖的2 1矩形个数 | 覆盖的种数 | | | | | 阅读全文
posted @ 2020-01-25 21:34 virgil_devil 阅读(129) 评论(0) 推荐(0)
摘要:剑指OFFER 旋转数组的最小数字 暴力解法 直接一次扫描找出最小元素,时间效率比较低,需要改进 发现提交测试的时间还是一样的,可能是测评系统的问题吧,使用了二分查找多少都会快一些吧 阅读全文
posted @ 2020-01-22 23:46 virgil_devil 阅读(96) 评论(0) 推荐(0)
摘要:剑指OFFER 用两个栈实现队列 阅读全文
posted @ 2020-01-22 10:06 virgil_devil 阅读(73) 评论(0) 推荐(0)
摘要:剑指OFFER 按之字形顺序打印二叉树 套用 的代码,然后翻转一下奇数行即可 阅读全文
posted @ 2020-01-22 09:27 virgil_devil 阅读(103) 评论(0) 推荐(0)
摘要:剑指OFFER 整数中1出现的次数 阅读全文
posted @ 2020-01-21 23:52 virgil_devil 阅读(88) 评论(0) 推荐(0)
摘要:剑指OFFER 把二叉树打印成多行 题目 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路 二叉树的宽搜,加一个pair类型记录当前遍历到的结点的所在层数 代码 其他想法 似乎测试集中所有的结点的val值不会重复,那么用val值来表示一个结点(而不是用指针)也似乎是可行的. 阅读全文
posted @ 2020-01-21 22:20 virgil_devil 阅读(114) 评论(0) 推荐(0)
摘要:剑指OFFER 包含min函数的栈 手动实现栈,考查基本知识的掌握 阅读全文
posted @ 2020-01-21 19:37 virgil_devil 阅读(75) 评论(0) 推荐(0)
摘要:剑指OFFER 和为S的连续整数序列 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21, 阅读全文
posted @ 2020-01-21 13:41 virgil_devil 阅读(111) 评论(0) 推荐(0)
摘要:剑指OFFER 把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如8输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路 直接对输入的数组进行排序,重写sort方法使用的cmp函数. 取能排 阅读全文
posted @ 2020-01-21 13:06 virgil_devil 阅读(108) 评论(0) 推荐(0)
摘要:剑指OFFER 栈的压入,弹出序列 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的 阅读全文
posted @ 2020-01-20 09:22 virgil_devil 阅读(104) 评论(0) 推荐(0)
摘要:剑指OFFER 链表中倒数第K个结点 思路 设置两个间隔为K个结点的指针,他们同步前进,后结点到达NULL的时候,说明前结点就是倒数第K个结点. 阅读全文
posted @ 2020-01-19 09:33 virgil_devil 阅读(84) 评论(0) 推荐(0)
摘要:剑指OFFER 对称的二叉树 思路 先正向先序遍历一次(先左子树,后右子树),再反向先序遍历一次(先右子树,后左子树).看两次遍历的结果是否相同,如果相同,那么说明是对称的. 分析 节点对称有两个含义, 1.节点的值相等 2.节点在树种的位置对称 如何准确地表示出节点在树中的位置是难点 注意 空结点 阅读全文
posted @ 2020-01-18 20:33 virgil_devil 阅读(93) 评论(0) 推荐(0)
摘要:剑指OFFER 连续数组的最大和 经典的动态规划题 其思路是把所有的和都算出来,当然不能简单粗暴的直接相加,要利用上一次计算出的结果加速第二次的运算 阅读全文
posted @ 2020-01-18 20:30 virgil_devil 阅读(85) 评论(0) 推荐(0)
摘要:剑指OFFER 两个链表的第一个公共结点 同步出发,如果首次发现已经被访问过的结点,那么这个结点就是第一个公共结点 阅读全文
posted @ 2020-01-18 20:28 virgil_devil 阅读(63) 评论(0) 推荐(0)
摘要:剑指OFFER 替换空格 阅读全文
posted @ 2020-01-17 08:36 virgil_devil 阅读(87) 评论(0) 推荐(0)