LintCode
DLNU-linglian
Label*我的名字*你的名字*(结束日**结束日)*(结束年**结束月)*(开始日**开始日)*(开始年**开始月)的结果加上624213446397901986688556014989999849556479365218546334957203004531297638941464889660918641041510905907314864550780136138,然后隔三位反64
展开
-
LintCode 86. 二叉查找树迭代器
题目: 二叉查找树迭代器要求:设计实现一个带有下列属性的二叉查找树的迭代器:元素按照递增的顺序被访问(比如中序遍历)next()和hasNext()的询问操作要求均摊时间复杂度是O(1)样例:对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12] 10 / \1 11 \ \ 6 ...原创 2018-05-04 22:08:21 · 429 阅读 · 0 评论 -
LintCode 41 最大子数组
题目:searchMatrix要求:给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。 注意事项 子数组最少包含一个数样例:给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6算法要求:要求时间复杂度为O(n)解题思路:如果前面加起来的和小于0,那么前面的抛弃即可。 就像捡东西,一直捡,并且跟捡的最有价值的时候比,如果捡的东西原创 2017-04-25 09:39:20 · 1148 阅读 · 0 评论 -
LintCode 73 前序遍历和中序遍历树构造二叉树
题目:solveNQueens要求:根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点样例:给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3算法要求:无解题思路:看这里算法如下: vector<int> inorder; vector<int> preorder; TreeNode *bu原创 2017-05-06 22:05:00 · 292 阅读 · 0 评论 -
LintCode 71 中序遍历和后序遍历树构造二叉树
题目:buildTree要求:根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点样例:给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \1 3算法要求:无解题思路:看这里算法如下: vector<int> inorder; vector<int> postorder; TreeNode *原创 2017-05-06 22:03:38 · 336 阅读 · 0 评论 -
LintCode 74 第一个错误的代码版本
题目:findFirstBadVersion要求:代码库的版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。 你可以通过 isBadVersion 的接口来判断版本号 version 是否在单元测试中出错,具体接口详情和调用方法请见代码的注释部分。样例:给出 n=5 调用isBadVersion(3),得到原创 2017-05-06 19:19:25 · 584 阅读 · 0 评论 -
LintCode 40 用栈实现队列
题目:MyQueue要求:正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。样例:比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2算法要求:仅使用两个栈来实现它,不使用任何原创 2017-04-24 12:50:04 · 334 阅读 · 0 评论 -
LintCode 39 恢复旋转排序数组
题目:searchMatrix要求:给定一个旋转排序数组,在原地恢复其排序。 什么是旋转数组?比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]样例:[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]算法要求:使用O(1)的额外空间和O(n)时间复杂度解题思路:循环将头部放到后面,知道遇到比原创 2017-04-24 12:35:38 · 300 阅读 · 0 评论 -
LintCode 38 搜索二维矩阵 II
题目:searchMatrix要求:写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。 每一列的整数从上到下是排序的。 在每一行或每一列中没有重复的整数。样例:考虑下列矩阵:[[1, 3, 5, 7],[2, 4, 7, 8],[3, 5, 9, 10]]给出target = 3,返回 2算法要求:要求O(m+n) 时间复杂度和原创 2017-04-23 22:40:40 · 389 阅读 · 0 评论 -
LintCode 36 翻转链表 II
题目:reverseBetween要求:翻转链表中第m个节点到第n个节点的部分样例:给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null算法要求:在原地一次翻转完成解题思路:在35题的基础上进行变型即可算法如下: ListNode *reverseBetween(ListNode *head, int m, int n) {原创 2017-04-23 21:32:43 · 368 阅读 · 0 评论 -
LintCode 35 翻转链表
题目:solveNQueens要求:翻转一个链表样例:给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null算法要求:在原地一次翻转完成解题思路:直接翻转即可~~~算法如下: ListNode *reverse(ListNode *head) { // write your code here if原创 2017-04-23 21:08:03 · 561 阅读 · 0 评论 -
LintCode 71 二叉树的锯齿形层次遍历
题目:solveNQueens要求:给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 样例:给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7返回其锯齿形的层次遍历为:[ [3], [20,9], [15,7]]算法要求:无解题思路:在每层判断下是不是该转置原创 2017-05-04 10:24:15 · 673 阅读 · 0 评论 -
LintCode 70 二叉树的层次遍历 II
题目:levelOrderBottom要求:给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)样例:给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7按照从下往上的层次遍历为:[ [15,7], [9,20], [3]]算法要求:无解题思路:直接原创 2017-05-04 10:03:00 · 513 阅读 · 0 评论 -
LintCode 69 二叉树的层次遍历
题目:solveNQueens要求:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]算法要求:挑战1:只使用一个队列去实现它 挑战2:用DFS算法来做解题思路:用i来记录当前层遍历了几个,n来原创 2017-05-04 09:38:23 · 591 阅读 · 0 评论 -
LintCode 68 二叉树的中序遍历
题目:inorderTraversal要求:给出一棵二叉树,返回其中序遍历样例:给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].算法要求:你能使用非递归算法来实现么?解题思路:直接递归搞定啦~算法如下: vector<int> vec; void mDisplay(TreeNode *root) { if原创 2017-05-03 12:22:43 · 347 阅读 · 0 评论 -
LintCode 67 二叉树的后序遍历
题目:postorderTraversal要求:给出一棵二叉树,返回其节点值的后序遍历。样例:给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].算法要求:你能使用非递归实现么?解题思路:直接递归,非递归有栈算法如下: vector<int> vec; void lDisplay(TreeNode *root) {原创 2017-05-03 12:21:44 · 415 阅读 · 0 评论 -
LintCode 66 二叉树的前序遍历
题目:preorderTraversal要求:给出一棵二叉树,返回其节点值的前序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].算法要求:你能使用非递归实现么?解题思路:直接递归搞定,非递归有栈。算法如下: vector<int> vec; void fDisplay(TreeNode *root) {原创 2017-05-03 12:20:33 · 688 阅读 · 0 评论 -
LintCode 34 N皇后问题 II
题目:totalNQueens要求:根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。样例:比如n=4,存在2种解决方案算法要求:无解题思路:思路跟皇后问题 I 一样。 就是把display改成m++即可。算法如下: int h[1001] = {0}; int n = 4; int m = 0; void dist(int row) {原创 2017-04-17 13:01:13 · 343 阅读 · 0 评论 -
LintCode 75 寻找峰值
题目:findPeak要求:你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] < A[1] 并且 A[n - 2] > A[n - 1]假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。样例:给出数组[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即数值 2 所在位置, 或者6, 即数值 7原创 2017-05-16 08:51:57 · 763 阅读 · 0 评论 -
LintCode 76 最长上升序列
题目:longestIncreasingSubsequence要求:给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。样例:给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3 给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4算法要求:要求时间复杂度为O(n^2) 或者 O(nlogn)解题思路:用dp数组存当前最长的长度。算法如下:原创 2017-05-16 09:21:17 · 333 阅读 · 0 评论 -
LintCode 77 最长公共子序列
题目:longestCommonSubsequence要求:给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。样例:给出”ABCD” 和 “EDCA”,这个LCS是 “A” (或 D或C),返回1 给出 “ABCD” 和 “EACB”,这个LCS是”AC”返回 2算法要求:无解题思路:dp[i][j]数组存的是从str[0]到str[i]与str2[0]到str2[j]之间公共的子序原创 2017-05-16 09:25:34 · 713 阅读 · 0 评论 -
LintCode 85. 在二叉查找树中插入节点
题目: 在二叉查找树中插入节点要求:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例:给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 /原创 2017-11-22 12:36:02 · 302 阅读 · 0 评论 -
LintCode 84. 落单的数III
题目:落单的数III要求:给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。样例:给出 [1,2,2,3,4,4,5,3],返回 1和5算法要求:O(n)时间复杂度,O(1)的额外空间复杂度解题思路:这次题中要求,求出2个落单的数字,我们第一时间想到的应该就是将如何将问题简单化,即我如何将二个数分开来,进行提取。 我们根据第一题的想法,可以得出,第一题算法可以计原创 2017-11-21 17:27:20 · 450 阅读 · 0 评论 -
LintCode 82. 落单的数
题目:solveNQueens要求:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例:给出 [1,2,2,1,3,4,3],返回 4算法要求:一次遍历,常数级的额外空间复杂度解题思路:我们只需要找出出现了一次的数字。 题中指出,只有一个数只出现过一次,那么我们只需要找到一个方法,放出现二次的数相除抵消,即相同的数相互抵消。 那我们就想起了位操作符中的异或原创 2017-11-21 16:42:12 · 480 阅读 · 0 评论 -
LintCode 83. 落单的数II
题目:落单的数II要求:给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。样例:给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4算法要求:一次遍历,常数级的额外空间复杂度解题思路:这道题就不能像上一道题那样,用异或来将二个相同的数抵消,但是我们可以使用同样的原理,在位上进行操作,实现出现三次则抵消。算法如下:class Solution {publi原创 2017-11-21 16:46:18 · 431 阅读 · 0 评论 -
LintCode 81. 数据流中位数
题目:solveNQueens要求:数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数。 说明中位数的定义:中位数是排序后数组的中间值,如果有数组中有n个数,则中位数为A[(n-1)/2]。比如:数组A=[1,2,3]的中位数是2,数组A=[1,19]的中位数是1。样例:持续进入数组的数的列表为:[1, 2, 3, 4, 5],则返回[1, 1, 2, 2, 3]持续原创 2017-11-21 13:28:38 · 401 阅读 · 0 评论 -
LintCode 49 字符大小写排序
题目:sortLetters要求:给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。 注意事项 小写字母或者大写字母他们之间不一定要保持在原始字符串中的相对位置。样例:给出”abAcD”,一个可能的答案为”acbAD”算法要求:在原地扫描一遍完成解题思路:前后遍历,前面找大写,后面找小写,找到后交换位置即可。算法如下: void sortLetters(string &原创 2017-04-27 11:33:23 · 718 阅读 · 0 评论 -
LintCode 48 主元素 III
题目:majorityNumber要求:给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k样例:给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3算法要求:要求时间复杂度为O(n),空间复杂度为O(k)解题思路:渣渣的我,没有想出来这个算法,只能用map啦~~~算法如下: int majorityNumber(vector<int> n原创 2017-04-27 11:25:34 · 727 阅读 · 0 评论 -
LintCode 47 主元素 II
题目:majorityNumber要求:给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。样例:给出数组[1,2,1,2,1,3,3] 返回 1算法要求:要求时间复杂度为O(n),空间复杂度为O(1)。解题思路:在1的基础上,进行变型,增加一个m2,相当于最后剩下2个数进行计算,那么m1肯定就大于三分之一。算法如下: int majorityNumber(vec原创 2017-04-27 09:55:27 · 388 阅读 · 0 评论 -
LintCode 79 最长公共子串
题目:solveNQueens要求:给出两个字符串,找到最长公共子串,并返回其长度。样例:给出A=“ABCD”,B=“CBCE”,返回 2算法要求:O(n x m) time and memory.解题思路:dp数组存储当前点二个字符串重复的值算法如下: int longestCommonSubstring(string &str, string &str2) { // wri原创 2017-05-18 08:38:39 · 443 阅读 · 0 评论 -
LintCode 78 最长公共前缀
题目:longestCommonPrefix要求:给k个字符串,求出他们的最长公共前缀(LCP)样例:在 “ABCD” “ABEF” 和 “ACEF” 中, LCP 为 “A” 在 “ABCDEFG”, “ABCEFG”, “ABCEFA” 中, LCP 为 “ABC”算法要求:无解题思路:没什么难度,直接硬上算法如下: string longestCommonPrefix(vector<原创 2017-05-18 08:29:02 · 2032 阅读 · 0 评论 -
LintCode 5 第K大元素
题目:kthLargestElement要求:在数组中找到第k大的元素 注意事项你可以交换数组中的元素的位置样例:给出数组 [9,3,2,4,8],第三大的元素是 4给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推算法要求:要求时间复杂度为O(n),空间复杂度为O(1)解题思路:用计数排序就可以解决,注意的是,需要从后往前计数,所以需要用一个m原创 2017-02-15 14:41:46 · 1031 阅读 · 1 评论 -
LintCode 46 主元素
题目:solveNQueens要求:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 注意事项 You may assume that the array is non-empty and the majority number always exist in the array.样例:给出数组[1,1,1,1,2,2,2],返回 1算法要求:要求时间复杂度为原创 2017-04-26 09:29:02 · 348 阅读 · 0 评论 -
LintCode 45 最大子数组差
题目:maxDiffSubArrays要求:给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。 返回这个最大的差值。 注意事项 子数组最少包含一个数样例:给出数组[1, 2, -3, 1],返回 6算法要求:时间复杂度为O(n),空间复杂度为O(n)解题思路:第一次,找每点的左边最大和右边最小,最后比较差值的绝对值, 第二次,原创 2017-04-26 09:16:57 · 526 阅读 · 0 评论 -
LintCode 44 最小子数组
题目:minSubArray要求:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 注意事项 子数组最少包含一个数字样例:给出数组[1, -1, -2, 1],返回 -3算法要求:无解题思路:跟求最大子数组相反算法如下: int minSubArray(vector<int> nums) { // write your code here in原创 2017-04-26 08:57:55 · 1077 阅读 · 0 评论 -
LintCode 43 最大子数组 III
题目:maxSubArray要求:给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。注意事项子数组最少包含一个数样例:给出数组 [-1,4,-2,3,-2,3] 以及 k = 2,返回 8算法要求:无解题思路:无算法如下: int maxSubArray(vector<int> nums, int k) {原创 2017-04-25 23:06:09 · 798 阅读 · 0 评论 -
LintCode 42 最大子数组 I
题目:maxTwoSubArrays要求:给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。 每个子数组的数字在数组中的位置应该是连续的。 返回最大的和。注意事项子数组最少包含一个数样例:给出数组 [1, 3, -1, 2, -1, 2] 这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7算法要求:要求时间复原创 2017-04-25 19:01:02 · 579 阅读 · 0 评论 -
LintCode 33 N皇后问题
题目:solveNQueens要求:n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解决方案。每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。样例:对于4皇后问题存在两种解决的方案:[ [".Q..", // Solution 1 "...Q", "Q...", "原创 2017-04-17 12:55:36 · 535 阅读 · 0 评论 -
LintCode 32 最小子串覆盖
题目:minWindow要求:给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串。 注意事项1. 如果在source中没有这样的子串,返回"",如果有多个这样的子串,返回起始位置最小的子串。2. 在答案的子串中的字母在目标字符串中是否需要具有相同的顺序?原创 2017-04-17 09:47:01 · 1303 阅读 · 0 评论 -
LintCode 7 二叉树的序列化和反序列化
题目:serialize and deserialize要求:设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。样例:给出一个测试数据样例, 二叉树{3,9,20,#,#,15,7},表示如下的树原创 2017-02-15 22:06:28 · 1808 阅读 · 0 评论 -
LintCode 6 合并排序数组
题目:mergeSortedArray要求:合并两个排序的整数数组A和B变成一个新的数组。样例:给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]算法要求:你能否优化你的算法,如果其中一个数组很大而另一个数组很小?解题思路:使用迭代器遍历2个数组,如果A的迭代器比B中的小,则存入第三个数组,并将A的迭代器迭代一次,否则将B的迭代器存入第三个数组,并将迭代器迭原创 2017-02-15 19:09:01 · 364 阅读 · 0 评论