lintcode
文章平均质量分 52
stevewongbuaa
这个作者很懒,什么都没留下…
展开
-
lintcode寻找旋转排序数组中的最小值/循环有序数组的查找
问题描述循环有序数组假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。笔记还是要用二分查找。再加一点细节处理。参考《剑指offer》代码class Solution {public: /** * @param num: a rotated sorted ar原创 2016-09-25 17:33:46 · 1243 阅读 · 0 评论 -
lintcode segment-tree-query 线段树的查询
问题描述lintcode笔记假设对于root来说的中间分界点为rmid=(rstart+rend)/2,关键是要找到start、end和中间分界点rmid的关系以及相应的处理方法。如果start和end都小于等于rmid,那就在root->left那边继续查询如果start 和 end 都大于rmid, 那就在 root->right 那边继续查询如果start 小于等于 rmid 且 end原创 2016-07-21 15:59:15 · 450 阅读 · 0 评论 -
lintcode construct-binary-tree-from-inorder-and-postorder-traversal 中序遍历和后序遍历树构造二叉树
问题描述lintcode笔记还是要使用递归,利用vector的迭代器iter,设计一个递归函数TreeNode* buildTree(iter istart, iter iend, iter pstart, iter pend)表示,使用从istart-iend的数,和从pstart到pend的数,来造这棵树,返回树的根节点。在中序序列中找到root节点,在root节点左边的用来构造root的左子树原创 2016-07-21 10:00:25 · 446 阅读 · 0 评论 -
lintcode binary-tree-serialization 二叉树的序列化与反序列化
问题描述lintcode参考Serialization/Deserialization of a Binary Tree LintCode Binary Tree Serialization笔记可以用先序遍历 和 使用"#"来表示NULL的方法来序列化,最后也用先序遍历来反序列化。代码/** * Definition of TreeNode: * class TreeNode { * pub原创 2016-07-21 09:26:40 · 879 阅读 · 0 评论 -
lintcode binary-tree-level-order-traversal 二叉树的层次遍历
问题描述lintcode笔记关键点,是要建立队列来实现广度优先遍历,同时以NULL来标记每一层的结束,有点神奇啊。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { *原创 2016-07-20 19:12:00 · 543 阅读 · 0 评论 -
lintcode add-two-numbers 链表求和
问题描述你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 样例 给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null笔记在代码2中,要注意的时判断l1和l2是否到了尽头。 if (l1 != NULL)原创 2016-07-20 08:54:19 · 560 阅读 · 0 评论 -
lintcode flatten-binary-tree-to-linked-list 将二叉树拆成链表 前序扁平化 中序扁平化
问题描述lintcode笔记看了半天还是比较能接受递归的解法。参考: [LeetCode] flatten binary tree 扁平化二叉树 思路:假设以下函数 TreeNode covert2link(TreeNode *root)可以将一棵树转化为符合要求的链表,并返回链表的尾部(链表的头部必定是root)。那么该怎么做呢?那就是:首先,调用这个函数把左子树转化为符合要求的链表,原创 2016-07-20 16:04:47 · 847 阅读 · 0 评论 -
lintcode segment-tree-build 线段树的构造
问题描述lintcode笔记把中间点算出来,然后使用递归构造。要注意start > end的情况。代码/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end; * SegmentTreeNode *left, *right; * Segmen原创 2016-07-21 15:50:36 · 458 阅读 · 0 评论 -
lintcode线段树的应用
问题描述lintcode区间最小数笔记个人感觉,线段树就是可以将数据拆分成小区间的统计结果,如果需要大量的区间查询,可以使用线段树。代码/** * Definition of Interval: * classs Interval { * int start, end; * Interval(int start, int end) { * this->sta原创 2016-07-22 07:56:29 · 333 阅读 · 0 评论 -
lintcode merge-k-sorted-lists 合并k个排序链表
问题描述lintcode笔记用到了堆/优先队列 代码1用到了STL的priority_queue 代码2用到了STL的heap,要特别注意push_heap,pop_heap的实际操作,我就被坑了一上午的时间。比如说,如果是小顶堆的话,pop_heap是把要删除的元素(最小的元素)放到了最后,然后再用vec.pop_back()才能正确地删除。还有cmp要写成cmp()。 代码3自己写了个he原创 2016-07-24 15:22:53 · 517 阅读 · 0 评论 -
lintcode minimum-depth-of-binary-tree 二叉树最小深度
问题描述lintcode笔记与求最大深度不同的是,求最小深度要考虑到左孩子或者右孩子为空的情况。如果左孩子或者右孩子为空,空的那一边不能用来计算深度,因此要求max(取非空那一边的深度),而不是求min。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *le原创 2016-07-20 18:13:55 · 610 阅读 · 0 评论 -
lintcode segment-tree-modify 线段树的修改
问题描述lintcode笔记比较左孩子的end与index,如果index<=root->left->end说明index在左子树,那就递归修改左子树,否则递归修改右子树。最后把root的max值更新。代码/** * Definition of SegmentTreeNode: * class SegmentTreeNode { * public: * int start, end,原创 2016-07-21 17:14:45 · 509 阅读 · 0 评论 -
二进制中有多少个1
问题描述计算在一个 32 位的整数的二进制表式中有多少个 1.样例 给定 32 (100000),返回 1给定 5 (101),返回 2给定 1023 (111111111),返回 9笔记利用特性 num & (num - 1) 可以去掉二进制中最低位的1。代码1,笨方法class Solution {public: /** * @param num: an integer原创 2016-08-04 22:16:10 · 252 阅读 · 0 评论 -
c++ python实现 单例 singleton
首先是通过了Lintcode测试的,九章算法提供的代码/** * 本代码由九章算法编辑提供。没有版权欢迎转发。 * - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。 * - 现有的面试培训课程包括:九章算法班,系统设计班,九章强化班,Java入门与基础算法班 * - 更多详情请见官方网站:http://www.jiuzhang.com/ */c转载 2016-07-19 18:35:26 · 574 阅读 · 0 评论 -
Catalan数 卡特兰数
参考维基百科Catalan数——卡特兰数引文wiki被墙,只好土土地把内容搬运过来。。组合数学中有非常多的组合结构可以用卡塔兰数来计数。在Richard P. Stanley的Enumerative Combinatorics: Volume 2一书的习题中包括了66个相异的可由卡塔兰数表达的组合结构。以下用n=3和n=4举若干例:Cn表示长度2n的dyck word的个数。Dyck word是一个原创 2016-08-11 11:24:42 · 938 阅读 · 0 评论 -
lintcode subtree 子树
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 18:50:46 · 334 阅读 · 0 评论 -
lintcode 翻转链表
问题描述http://www.lintcode.com/zh-cn/problem/reverse-linked-list/样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null笔记就是倒腾一下几个节点,找递推规律代码/** * Definition of ListNode * * class ListNode { * public: * i原创 2016-08-28 17:07:57 · 1335 阅读 · 0 评论 -
Backpack VI
问题描述http://www.lintcode.com/zh-cn/problem/backpack-vi/Given an integer array nums with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer原创 2016-08-06 10:14:02 · 960 阅读 · 0 评论 -
lintcode balanced-binary-tree 平衡二叉树
问题描述平衡二叉树笔记这个题是没想出来,也没想起来了,最后参考了九章算法的解法。代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val =原创 2016-07-20 10:44:26 · 1927 阅读 · 0 评论 -
第k大元素
问题描述http://www.lintcode.com/zh-cn/problem/kth-largest-element/在数组中找到第k大的元素样例 给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推笔记使用快排的partition函数代码class Solution {public:原创 2016-08-05 11:43:46 · 442 阅读 · 0 评论 -
落单的数 III
问题描述http://www.lintcode.com/zh-cn/problem/single-number-iii/给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。样例 给出 [1,2,2,3,4,4,5,3],返回 1和5笔记先把数据全都异或一个遍,出现两次的数全都被抵消了。剩下不同的两个数a和b的异或。因为a与b不同,a^b肯定不为0。找出a^b的最低原创 2016-08-05 10:37:08 · 337 阅读 · 0 评论 -
落单的数II
问题描述http://www.lintcode.com/zh-cn/problem/single-number-ii/给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4笔记代码1利用字典,存下来不同数字出现的次数,最后把次数1次的返回。时间复杂度O(n),空间复杂度O(n)。代码2排序,然后再找只原创 2016-08-04 23:11:14 · 536 阅读 · 0 评论 -
落单的数
问题描述http://www.lintcode.com/zh-cn/problem/single-number/给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例 给出 [1,2,2,1,3,4,3],返回 4笔记利用位运算特性,异或的特性,相同的数异或为0,任何数与0异或为自己。代码class Solution {public: /**原创 2016-08-04 22:25:48 · 160 阅读 · 0 评论 -
lintcode maximum-depth-of-binary-tree 二叉树的最大深度
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 17:42:19 · 760 阅读 · 0 评论 -
lintcode insert-node-in-a-binary-search-tree 在二叉查找树中插入节点
问题描述http://www.lintcode.com/zh-cn/problem/insert-node-in-a-binary-search-tree/笔记当root节点为空,表示可以插入node,因此直接返回node。 如果node->val < root->val,应该在左子树插入。否则在右子树插入。然后返回root。代码/** * Definition of TreeNode: *原创 2016-08-03 15:48:22 · 576 阅读 · 0 评论 -
lintcode graph-valid-tree 图是否是树
问题描述http://www.lintcode.com/zh-cn/problem/graph-valid-tree/笔记参考 有向图也可参考下面这个链接 https://segmentfault.com/a/1190000004262708http://www.cnblogs.com/jcliBlogger/p/4738788.html树,其实是不存在环而且没有孤立节点的图。 As sug原创 2016-08-03 14:51:05 · 1987 阅读 · 0 评论 -
lintcode minimum-path-sum 最小路径和
问题描述lintcode笔记代码原创 2016-07-26 15:35:57 · 368 阅读 · 0 评论 -
lintcode longest-increasing-continuous-subsequence 最长上升连续子序列
问题描述lintcode笔记假设buff[i]的含义是,从第0到第i个数的序列中,以第i个数为结尾的LICS的长度。(代码1) 九章算法的解法是,分别计算递增和递减的LICS长度,最后取大者,比我的解法简单。(代码2)代码1class Solution {public: /** * @param A an array of Integer * @return an原创 2016-07-26 14:39:24 · 643 阅读 · 0 评论 -
lintcode climbing-stairs 爬楼梯 递归 循环
问题描述lintcode笔记爬n级楼梯的方法数,等于爬上n-1级楼梯的方法数(再爬1级),加上爬上n-2级楼梯的方法数(再爬2级)。climbStairs(n) = climbStairs(n-1) + climbStairs(n-2)但是这样算会有大量的重复计算。可以将中间结果缓存起来。(代码2)也可以根据这个递推式自底向上地计算。先算climbStairs(1),climbStairs(2)。。原创 2016-07-26 14:38:03 · 978 阅读 · 0 评论 -
lintcode interleaving-string 交叉字符串
问题描述lintcode笔记buff[i][j]表示: s1的前i个字符和s2的前j个字符是否能交叉组成s3前i+j个字符。 若要buff[i][j] = true,有两种情况。s1前i-1个字符与s2前j个字符符合要求,而且s1的i个字符正好是s3的第(i+j)个字符。s2前j-1个字符与s1前i个字符符合要求,而且s2的j个字符正好是s3的第(i+j)个字符。还要做初始化。见代码2的再原创 2016-07-26 11:24:05 · 414 阅读 · 0 评论 -
lintcode longest-common-subsequence 最长公共子序列 证明
问题描述lintcode参考coursera-北京大学-算法基础-动态规划(1)-几个例题笔记动态规划问题,同样要建表。 buff[i][j]表示以字符串A的第i位结束,以字符串B的第j位结束,的最长公共子序列。 状态转移方程:if (A[i] == B[j]) buff[i][j] = buff[i-1][j-1] + 1;else buff[i][j] = max(b原创 2016-07-26 09:12:33 · 1517 阅读 · 1 评论 -
lintcode minimum-adjustment-cost 最小调整代价
问题描述lintcode笔记假设buff[i][j]的含义为:将第i个数改成j的调整代价。如果改成j之后不符合调整的目标则buff[i][j]=INT_MAX。初始化缓存将第0个数改为j的代价是buff[0][j] = abs(A[0]-j);为了符合调整目标,将第i个数改成j的话,第i-1个数k的可取值范围是[j-target, j+target]。在符合调整目标的情况下的状态转移方程为:buff原创 2016-07-25 23:18:37 · 963 阅读 · 0 评论 -
lintcode backpack 背包问题
问题描述lintcode笔记 通常这种动态规划的问题需要建一个表作为缓存,然后搞清楚每个元素的含义,以及元素之间的递推关系。在这里建立一个二维表buff,行号i代表第几件物品,列号j代表背包容量。以物品w=[2,3,5,7]和容量m=11为例。buff[i][j]的含义是考虑第i件物品,容量为j的时候,所能放下的最大容量。那么,递推关系应该是:buff[i][j] = max(buff[i-1原创 2016-07-25 15:48:32 · 596 阅读 · 0 评论 -
lintcode kth-smallest-number-in-sorted-matrix 排序矩阵中的从小到大第k个数
问题描述lintcode笔记使用了比较复杂的数据结构。 一个是priority_queue,队列里的元素是pair<int, pair<int, int>> ,分别存放矩阵值,和矩阵坐标。在循环中每次pop出来元素的最小值,然后把元素的最小值的“右边”和“下边”元素都入队。priority_queue自动就从小到大的顺序排好序了。。priority_queue大法好!还有一些小细节要注意的是原创 2016-07-23 10:21:36 · 943 阅读 · 0 评论 -
lintcode validate-binary-search-tree 验证二叉查找树
问题描述lintcode笔记代码1是用到中序遍历,要求中序遍历是严格的增序。用到了辅助空间。代码2是leetcode上面的解法,用到了prev指针记录前一个节点,省下了辅助空间,而且要注意prev传进去还应该是引用。代码1/** * Definition of TreeNode: * class TreeNode { * public: * int val; * Tr原创 2016-07-22 17:03:33 · 906 阅读 · 0 评论 -
lintcode search-range-in-binary-search-tree 二叉搜索树中搜索区间
问题描述lintcode笔记一开始没有想到怎样利用二叉搜索树的性质简化程序,强行中序遍历了树,如代码1。其实还是应该利用二叉搜索树的性质。中序遍历是一定的访问左孩子--访问当前节点--访问右孩子可以做的改进是:k1比当前节点小才去访问左孩子。(可能还遗漏了一些大于k1小于当前节点的数)k2比当前节点大才去访问右孩子。(可能还遗漏了一些大于当前节点小于k2的数)如代码2。代码1 暴力中序遍历/*原创 2016-07-22 14:21:57 · 348 阅读 · 0 评论 -
lintcode paint-fence 栅栏染色
问题描述lintcodelintcode表述有问题,原文是“必须保证任意两个相邻的柱子颜色不同,应该表述为“不能有连续三个柱子颜色相同”。参考LintCode:栅栏染色 参考里改掉的表述感觉也不对,还是应该说“不能有连续三个柱子颜色相同”。笔记在改掉问题表述的情况下: 假设buff[i]为有i个柱子时的染色方案。可以分为两种情况: 1. 最后两个柱子颜色相同。 前i-2个柱子已经有buf原创 2016-07-26 16:31:32 · 1997 阅读 · 0 评论 -
lintcode triangle 数字三角形
问题描述lintcode笔记代码1设置buff[i][j]为:以元素(i,j)结尾的最小路径和。 buff[i][j]应该是buff[i-1][j-1]和buff[i-1][j]中的较小值再加上当前的triangle[i][j]。 则状态转移方程为: buff[i][j] = min(buff[i-1][j-1], buff[i-1][j] + triangle[i][j] 初始条件为:原创 2016-07-26 17:19:59 · 1821 阅读 · 0 评论 -
lintcode convert-sorted-array-to-binary-search-tree-with-minimal-height 把排序数组转换为高度最小的二叉搜索树
问题描述lintcode笔记buildTree函数最后别忘了return root代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val =原创 2016-07-20 11:56:02 · 601 阅读 · 0 评论 -
lintcode binary-tree-paths 二叉树的所有路径
问题描述lintcode笔记代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left原创 2016-07-20 11:39:12 · 580 阅读 · 0 评论