随笔分类 - LintCode 代码
摘要:"带环链表 II" 给定一个链表,如果链表中存在环,则返回到链表中环的起始节点的值,如果没有环,返回null。 样例 给出 21 10 4 5, tail connects to node index 1,返回10 挑战 不使用额外的空间 标签 链表 两根指针 思路 参考 "lintcode 102
阅读全文
摘要:"102 带环链表" 给定一个链表,判断它是否有环。 样例 给出 21 10 4 5, tail connects to node index 1,返回 true 挑战 不要使用额外的空间 标签 链表 两根指针 思路 快慢指针的典型应用,使用块指针 fast 与慢指针 slow,slow每次后移一位
阅读全文
摘要:"101 删除排序数组中的重复数字 II" 跟进“删除重复数字”: 如果可以允许出现两次重复将如何处理? 样例 标签 数组 两根指针 脸书 思路 参照上一篇博客 "lintcode 100 删除排序数组中的重复数字" ,只需加一个标志isSecond,用于表示某个数字是否出现了2次 code cla
阅读全文
摘要:"100 删除排序数组中的重复数字" 素只出现一次,并且返回新的数组的长度。 不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。 样例 给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。 标签 数组 两根指针 脸书 思路 将数组分为两段,前一段是已经删除重复元素的数
阅读全文
摘要:"99 重排链表" 给定一个单链表L: L0→L1→…→Ln 1→Ln, 重新排列后为:L0→Ln→L1→Ln 1→L2→Ln 2→… 必须在不改变节点值的情况下进行原地操作。 样例 给出链表 1 2 3 4 null,重新排列后为1 4 2 3 null。 挑战 Can you do this i
阅读全文
摘要:"98 链表排序" 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。 样例 给出 1 3 2 null,给它排序变成 1 2 3 null. 挑战 分别用归并排序和快速排序做一遍。 标签 链表 思路 采用归并排序(时间复杂度是O(nlogn)的排序有快速排序、归并排序、堆排序)
阅读全文
摘要:"96 链表划分" 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 样例 给定链表 1 4 3 2 5 2 null,并且 x=3 返回 1 2 2 4 3 5 null 标签 链表 两根指针 思路 遍历一次链表,使用常数级
阅读全文
摘要:"95 验证二叉查找树" 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。 样例 一个例子: 上述这棵二叉树序列化为 {2,1,4
阅读全文
摘要:"94 二叉树中的最大路径和" 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) 样例 给出一棵二叉树: 返回 6 标签 动态规划 分治法 递归 思路 找出某节点最大和次大路径,合并这两条路径即为最大路径和。 code
阅读全文
摘要:"93 平衡二叉树" 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 A={3,9,20, , ,15,7}, B={3, ,20,15,7} 二叉树A
阅读全文
摘要:"87 删除二叉查找树的节点" 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。 样例 给出如下二叉查找树: 删除节点3之后,你可以返回: 或者: 标签 二叉查找树 LintCode 版权所有 思路 若要
阅读全文
摘要:"86 二叉查找树迭代器" 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 样例 对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12] 挑战 额外空间
阅读全文
摘要:"85 在二叉查找树中插入节点" 给定一棵二叉查找树和一个新的树节点,将节点插入到树中。 你需要保证该树仍然是一棵二叉查找树。 注意事项 You can assume there is no duplicate values in this tree + node. 样例 给出如下一棵二叉查找树,在
阅读全文
摘要:"84 落单的数 III" 给出2 n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。 样例 给出 [1,2,2,3,4,4,5,3],返回 1和5 挑战 O(n)时间复杂度,O(1)的额外空间复杂度 标签 贪心 LintCode 版权所有 思路 对于2 n+1个数字用异
阅读全文
摘要:"83 落单的数 II" 给出3 n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。 样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4 挑战 一次遍历,常数级的额外空间复杂度 标签 贪心 思路 利用位运算,int有32位,用一个长度为32的数组记录每个数
阅读全文
摘要:"79 最长公共子串" 给出两个字符串,找到最长公共子串,并返回其长度。 注意事项 子串的字符应该连续的出现在原字符串中,这与子序列有所不同。 样例 给出A=“ABCD”,B=“CBCE”,返回 2 挑战 O(n x m) time and memory. 标签 字符串处理 LintCode 版权所
阅读全文
摘要:"78 最长公共前缀" 给k个字符串,求出他们的最长公共前缀(LCP) 样例 在 "ABCD" "ABEF" 和 "ACEF" 中, LCP 为 "A" 在 "ABCDEFG", "ABCEFG", "ABCEFA" 中, LCP 为 "ABC" 标签 字符串处理 枚举法 基本实现 LintCode
阅读全文
摘要:"77 最长公共子序列" 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。 说明 最长公共子序列的定义: 最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的子串)。该问题是典型的计算机科学问题,是文件差异比较程序的基础,在生物信息学
阅读全文
摘要:"76 最长上升子序列" 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的。https://en.wikipedia.org/wiki
阅读全文
摘要:"75 寻找峰值" 你给出一个整数数组(size为n),其具有以下特点: 相邻位置的数字是不同的 A[0] A[n 1] 假定P是峰值的位置则满足A[P] A[P 1]且A[P] A[P+1],返回数组中任意一个峰值的位置。 注意事项 数组可能包含多个峰值,只需找到其中的任何一个即可 样例 给出数组
阅读全文