随笔分类 -  LeetCode

1
关于LeetCode的一些记录.
摘要:给定中序遍历inorder和后序遍历postorder, 请构造出二叉树.算法思路: 设后序遍历为po, 中序遍历为io.首先取出po的最后一个节点作为根节点, 同时将这个节点入stn栈;随后比较io的最后一个节点和stn栈顶节点:如果不同则将此节点添加到栈顶节点的右侧并入stn栈, 同时从po中删... 阅读全文
posted @ 2014-11-04 15:03 Lancelod_Liu 阅读(1675) 评论(1) 推荐(1)
摘要:给定字符串S, 找到其子串中最长的回文字符串.反转法: 反转S为S', 找到其中的最长公共子串s, 并确认子串s在S中的下标iS与在S'中的下标iS'是否满足式: length(S) =iS +iS' + length(s). 如果满足则s为搜索结果, 如果不满足我们就继续搜索.DP解法:定义 P[... 阅读全文
posted @ 2014-10-23 22:45 Lancelod_Liu 阅读(317) 评论(0) 推荐(0)
摘要:给定一系列词, 找出其中所有的变序词组合.Note: 变序词 - 组成字符完全相同但次序不同的单词. 如dog和god, ate和eat.算法描述: 使用map >存储所有的结果. 最后将map中size > 1的vector插入到结果中.代码: 1 class Solution { 2 publi... 阅读全文
posted @ 2014-09-15 18:31 Lancelod_Liu 阅读(220) 评论(0) 推荐(0)
摘要:给定一系列非负整数, 每个值代表从此下标可以向前跳跃的最远距离, 试求出跳跃到数组尾端需要的最少步骤.如给定 [2,3,1,1,4], 返回2. (从下标0跳到1, 从1跳到下标4).算法描述: 贪心算法, 从头开始遍历数组, 记录通过ret+1步能够到达的最远下标为curr,记录通过ret步能够到... 阅读全文
posted @ 2014-09-15 10:10 Lancelod_Liu 阅读(420) 评论(0) 推荐(0)
摘要:给定链表和整数k, 使用in-space方法将链表按k个为一组进行倒序, 如果剩余个数不足k个则保留其原始顺序.如给定1->2->3->4->5,k= 2, 需要返回 2->1->4->3->5; 给定1->2->3->4->5, k= 3, 需要返回 3->2->1->4->5.算法描述:使用指针... 阅读全文
posted @ 2014-09-12 17:37 Lancelod_Liu 阅读(635) 评论(0) 推荐(0)
摘要:给定一个BST的根节点, 试判断此BST是否为符合规则的BST?规则: 对于一个BST的节点,它左侧的所有节点(包括子节点)必须小于它本身;它右侧的所有节点(包括子节点)必须大于它本身;它的左右节点也必须满足上面两条.算法思路: 对于给定的根节点N, 先找到它左子节点L的最底层的右子节点MR, 比较... 阅读全文
posted @ 2014-09-09 14:16 Lancelod_Liu 阅读(386) 评论(0) 推荐(0)
摘要:给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数).如, 给定链表:1->2->3->4->5->NULL, 以及 m = 2, n = 4.返回1->4->3->2->5->NULL.假定m和n满足约束条件:1 ≤m≤n≤ 链表长度.注意: 不能使用额外空间, 且只能... 阅读全文
posted @ 2014-09-04 21:56 Lancelod_Liu 阅读(222) 评论(0) 推荐(0)
摘要:给定一列数(未排序)和一个目标值, 找出所有可能的组合和等于目标值的组合, 数组中的数可以重复使用.算法思路: 使用递归.对数组排序, 从小到大;令i = 起始下标(初始为0), 对于每一个数,如果它等于目标值, 则在缓存结果中加入此数并将缓存结果加入输出队列, 随后在缓存结果中删除此数;如果它小于... 阅读全文
posted @ 2014-08-29 17:01 Lancelod_Liu 阅读(358) 评论(0) 推荐(0)
摘要:给定一组数(未排序, 可能有重复元素), 求出所有可能的组合.算法和无重复元素的相似.唯一需要注意的是, 如果当前的数字和之前的相同, 算法就只会在结尾数字是此数字的组合后加上此数字.比如现在是[[] [1] [1 2] [2]], 当前数字是2, 就只会增加[1 2 2] [2 2]代码: 1 c... 阅读全文
posted @ 2014-08-29 11:39 Lancelod_Liu 阅读(330) 评论(0) 推荐(0)
摘要:给定一组数(未排序), 求它们的所有组合可能.如给定{1 2 3}, 返回:[ [] [1] [2] [3] [1 2] [1 3] [2 3] [1 2 3] ]算法思路:对数组排序, 从小到大;令 i = 0, 对已有组合v从后往前进行如下操作v的最后1个组合内加入第i个元素;将新组合加入到v中... 阅读全文
posted @ 2014-08-29 11:22 Lancelod_Liu 阅读(349) 评论(0) 推荐(0)
摘要:给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的.解法思路参考: Finding three elements in an array whose sum is closest to an ... 阅读全文
posted @ 2014-08-28 21:59 Lancelod_Liu 阅读(183) 评论(0) 推荐(0)
摘要:给定有序链表(元素由小到大), 试问如何将其转换为一个平衡BST?平衡BST: 任意节点的左右子树的深度差值不大于1.主要思想是用递归. Trick是使用快慢指针来获取中间节点. 获得中间节点后, 将其设为此次递归的root, 随后删除此节点, 并将前一节点的next置NULL. 随后, 对中间节点... 阅读全文
posted @ 2014-08-28 10:23 Lancelod_Liu 阅读(204) 评论(0) 推荐(0)
摘要:给定一个链表头, 探测其是否有环, 如果没有返回NULL, 如果有返回环开始的位置.环开始的位置定义为被两个指针指向的位置.算法描述:1. 快慢指针遍历, 如果到头说明无环返回NULL, 如果相遇说明有环, 进入2.2. 慢指针回到起点, 快慢指针每次移动一格直到相遇, 返回快指针/慢指针.代码: ... 阅读全文
posted @ 2014-08-22 10:05 Lancelod_Liu 阅读(314) 评论(0) 推荐(0)
摘要:给定n个数: a1, a2, ... , an. 代表着(i, ai)个点, 连接这些点与对应的(i, 0), 我们可以得到n条线. 请在这n条线中找出2条, 使得这两条线和x轴构成的容器能够容纳最多的水.本题解法时间复杂度为O(n), 作者是n00tc0d3r.我们使用2个指针从数组前后开始遍历,... 阅读全文
posted @ 2014-08-15 17:10 Lancelod_Liu 阅读(323) 评论(0) 推荐(1)
摘要:给定n, 返回所有匹配的n对括号的可能形式. 如给定n= 3, 一个解集是:"((()))", "(()())", "(())()", "()(())", "()()()"本题解法的思路是使用栈seq保存经历的字符串状态;使用栈valid保存对应的字符串中有效的括号对个数;当seq不为空时(即回溯未... 阅读全文
posted @ 2014-08-14 16:37 Lancelod_Liu 阅读(329) 评论(0) 推荐(0)
摘要:N皇后问题:给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式?这个问题的解答网上有不少, 但是位操作解法的我看到的不多. 下面贴出代码和图解, 也就不赘述了. 1 class Solution { 2 public: ... 阅读全文
posted @ 2014-08-13 16:15 Lancelod_Liu 阅读(252) 评论(0) 推荐(0)
摘要:有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少)本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第n-2个元素的和, 与本题的要求完全相同).递归解法:1 int climbStairs(in... 阅读全文
posted @ 2014-08-12 15:25 Lancelod_Liu 阅读(267) 评论(0) 推荐(0)
摘要:本文部分参考Discuss: LeetCode.步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含.步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最... 阅读全文
posted @ 2014-07-31 16:37 Lancelod_Liu 阅读(469) 评论(0) 推荐(0)
摘要:本文原题: LeetCode.给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数.什么是二叉搜寻树?二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的... 阅读全文
posted @ 2014-07-16 18:28 Lancelod_Liu 阅读(816) 评论(0) 推荐(0)
摘要:问: 给定二叉树, 如何计算二叉树最大深度?算法描述如下:如果当前节点为空, 返回0(代表此节点下方最大节点数为0)如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1)上述算法的精髓在于递归调用中的终止条件.代码如下: 1 /** 2 * Definition for bin... 阅读全文
posted @ 2014-07-16 14:48 Lancelod_Liu 阅读(485) 评论(0) 推荐(0)

1