随笔分类 -  算法

摘要:二分查找整体思路 我们可以求出 使得每个袋子的球的数目大于等于mid 的操作次数opt 如果opt>maxOperations 那么说明分得多了,那就要增大mid 如果opt<maxOperations 那么说明分的少了,那就要减小mid 如果opt==maxOperations 其实就是所求答案, 阅读全文
posted @ 2022-12-20 14:03 virgil_devil 阅读(131) 评论(0) 推荐(0)
摘要:递归 递归很简单,遍历整棵树即可,代码复杂度为O(n) 点击查看代码 func countNodes(root *TreeNode) int { if root == nil { return 0 } return 1+countNodes(root.Left)+countNodes(root.Ri 阅读全文
posted @ 2022-12-16 18:58 virgil_devil 阅读(23) 评论(0) 推荐(0)
摘要:常见排序算法 编写代码并测试了5种排序算法 有冒泡排序,选择排序,插入排序,堆排序,归并排序. 下面也给出了代码在机器上的运行结果,虽然不同机器结果会不一样,但是仍然能够比较直观地感受到这些算法的区别,以及理论与实现之间的差距. 阅读全文
posted @ 2020-03-18 22:44 virgil_devil 阅读(170) 评论(0) 推荐(0)
摘要:剑指OFFER 平衡二叉树 分析 先理解什么是平衡二叉树 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 下面的代码我只判断了根节点左右孩子的深度(没有再递归判断其子树的),但是也一样过了. 代码 阅读全文
posted @ 2020-02-06 19:00 virgil_devil 阅读(113) 评论(0) 推荐(0)
摘要:剑指OFFER 二叉搜索树的第k个结点 分析 先中序遍历一遍,保存下结果,然后取第k小个结点即可 代码 阅读全文
posted @ 2020-02-06 18:29 virgil_devil 阅读(99) 评论(0) 推荐(0)
摘要:剑指OFFER 二叉搜索树与双向链表 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 分析 先按中序遍历一次,然后根据中序遍历的顺序来组织双向链表 代码 阅读全文
posted @ 2020-02-06 18:20 virgil_devil 阅读(114) 评论(0) 推荐(0)
摘要:剑指OFFER 数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法 阅读全文
posted @ 2020-02-06 15:46 virgil_devil 阅读(100) 评论(0) 推荐(0)
摘要:剑指OFFER 不用加减乘除做加法 分析 根据汇编加法思想,把加法分为两部分,一部分是进位部分,一部分是异或部分,不断循环得出结果 代码 阅读全文
posted @ 2020-02-06 14:25 virgil_devil 阅读(72) 评论(0) 推荐(0)
摘要:剑指OFFER 扑克牌顺子 分析 把数与数之间的缝隙用0去填,如果0够用那么就是顺子;如果0用完了仍然填不完缝隙,那么就组不成顺子 代码 阅读全文
posted @ 2020-02-06 13:53 virgil_devil 阅读(96) 评论(0) 推荐(0)
摘要:剑指OFFER 复杂链表的复制 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 分析 设A为被复制的链表,B为复制成功的链 阅读全文
posted @ 2020-02-06 12:37 virgil_devil 阅读(92) 评论(0) 推荐(0)
摘要:剑指OFFER 树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析 先遍历A树,如果A树某个节点与B树的根节点相同,那么以这两个结点出发,看是否是是子结构. 判断子结构需要以这两个结点出发进行同步遍历 代码 阅读全文
posted @ 2020-02-06 11:48 virgil_devil 阅读(114) 评论(0) 推荐(0)
摘要:剑指OFFER 二叉搜索树的后序遍历 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 分析 判断是否是二叉搜索树的后序遍历结果,那么得先明白什么是二叉搜索树,还有什么是后序遍历 这是一颗二叉搜索树, 阅读全文
posted @ 2020-02-05 22:13 virgil_devil 阅读(116) 评论(0) 推荐(0)
摘要:剑指OFFER 机器人的运动范围 矩形搜索的变形,可以深搜,也可以广搜. 思维上没有什么难度,但是需要细心. 深搜代码 阅读全文
posted @ 2020-02-05 08:59 virgil_devil 阅读(87) 评论(0) 推荐(0)
摘要:剑指OFFER 二叉树的下一个结点 阅读全文
posted @ 2020-02-04 21:56 virgil_devil 阅读(83) 评论(0) 推荐(0)
摘要:剑指OFFER 孩子们的游戏 本质上都是被点到孩子就出局,区别在于怎么表示出局这个状态 数组解法(复杂度高) STL链表解法 阅读全文
posted @ 2020-02-03 18:28 virgil_devil 阅读(188) 评论(0) 推荐(0)
摘要:剑指OFFER 剪绳子 阅读全文
posted @ 2020-02-03 17:11 virgil_devil 阅读(89) 评论(0) 推荐(0)
摘要:剑指OFFER 数值的整数次方 阅读全文
posted @ 2020-02-03 14:07 virgil_devil 阅读(82) 评论(0) 推荐(0)
摘要:剑指OFFER 构建乘积数组 题目描述 给定一个数组A[0,1,...,n 1],请构建一个数组B[0,1,...,n 1],其中B中的元素B[i]=A[0] A[1] ... A[i 1] A[i+1] ... A[n 1]。不能使用除法。 分析 题目说不能用除法,有点奇怪,明明用除法是最快的.. 阅读全文
posted @ 2020-02-03 13:54 virgil_devil 阅读(121) 评论(0) 推荐(0)
摘要:剑指OFFER 滑动窗口的最大值 阅读全文
posted @ 2020-02-03 13:21 virgil_devil 阅读(80) 评论(0) 推荐(0)
摘要:剑指OFFER 正则表达式匹配 写这道题花了很长的时间,提交了无数次,果然是HARD的难度.搜了别人的博客,有两种解法,一种是递归,一种是动态规划.目前我只实现了递归,代码也有点乱,蛮多边界条件需要考虑的. 递归题解 注:这是在leetcode上提交的代码,稍加修改即可通过剑指OFFER的OJ 阅读全文
posted @ 2020-02-01 09:24 virgil_devil 阅读(212) 评论(0) 推荐(0)