
lintcode
zsjmfy
这个作者很懒,什么都没留下…
展开
-
lintcode,克隆二叉树
深度复制一个二叉树。 给定一个二叉树,返回一个他的 克隆品 解题思路:递归实现。 一刷ac/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { *原创 2016-12-17 17:46:59 · 221 阅读 · 0 评论 -
lintcode,二叉树的中序遍历
给出一棵二叉树,返回其中序遍历参考 https://discuss.leetcode.com/topic/30632/preorder-inorder-and-postorder-iteratively-summarization递归/** * Definition of TreeNode: * public class TreeNode { * public int val; *原创 2016-12-15 20:28:33 · 227 阅读 · 0 评论 -
lintcode,全排列
给定一个数字列表,返回其所有可能的排列。 样例 给出一个列表[1,2,3],其全排列为: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]一刷ac 解题思路:递归或者非递归。递归需要每次置换首位,然后递归后面的字符串,最后在递归结果中加入首位字符。非递归考虑用队列存储每次的排列,再上一次的全原创 2016-12-21 20:19:49 · 436 阅读 · 0 评论 -
lintcode,单词搜索
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。 单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。 样例 给出board = [“ABCE”,“SFCS”,“ADEE”] word = “ABCCED”, ->返回 true, word = “SEE”,-> 返回 true, word = “ABCB”,原创 2016-12-22 10:47:53 · 467 阅读 · 0 评论 -
lintcode,电话号码的字母组合
给一个不包含01的数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。 下图的手机按键图,就表示了每个数字可以代表的字母。 样例 给定 “23” 返回 [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]解题思路:和全排列的思路相同,这里还是用队列存储可能的字母组合,然后查找数组对应的字母,然后更新字母组合。和全排列都要注意的原创 2016-12-21 20:46:15 · 820 阅读 · 0 评论 -
lintcode,逆序对
在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。给你一个数组,求出这个数组中逆序对的总数。 概括:如果a[i] > a[j] 且 i < j, a[i] 和 a[j] 构成一个逆序对。 样例 序列 [2, 4, 1, 3, 5] 中,有 3 个逆序对 (2, 1), (4, 1), (4, 3),则返回 3 。一刷ac 解题思路:将统计逆序对的过程分为两个部分,原创 2016-12-22 11:27:56 · 451 阅读 · 0 评论 -
lintcode,单词接龙
给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列 比如: 每次只能改变一个字母。 变换过程中的中间单词必须在字典中出现。 注意事项 如果没有转换序列则返回0。 所有单词具有相同的长度。 所有单词都只包含小写字母。 样例 给出数据如下: start = “hit” end = “cog” dict = [“hot”,”dot”,”dog”,原创 2016-12-22 14:23:11 · 1387 阅读 · 0 评论 -
lintcode,不同的二叉查找树
给出 n,问由 1…n 为节点组成的不同的二叉查找树有多少种? 样例 给出n = 3,有5种不同形态的二叉查找树:1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2016-12-22 17:40:01 · 307 阅读 · 0 评论 -
lintcode,合并区间
给出若干闭合区间,合并所有重叠的部分。 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ]原创 2016-12-22 19:33:27 · 461 阅读 · 0 评论 -
lintcode,编辑距离
给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。 你总共三种操作方法: 插入一个字符 删除一个字符 替换一个字符 样例 给出 work1=”mart” 和 work2=”karma” 返回 3一刷没ac 解题思路:寻找状态,dp[i][j]表示字符串1的前i位到字符串2的前j位的编辑距离。因此可以根据三种操作来递推得到公式。public cla原创 2016-12-22 20:51:10 · 333 阅读 · 0 评论 -
lintcode,将二叉查找树转换成双链表
将一个二叉查找树按照中序遍历转换成双向链表。 样例 给定一个二叉查找树: 4 / \ 2 5 / \ 1 3 返回 1<->2<->3<->4<->5。解题思路:类似中序遍历的过程,递归或者基于栈的非递归来实现。/** * Definition of TreeNode: * public class TreeNode { * public i原创 2016-12-18 11:28:52 · 691 阅读 · 0 评论 -
lintcode,二叉树的前序遍历
给出一棵二叉树,返回其节点值的前序遍历。解题思路:递归和非递归,三种遍历类似。一刷ac递归/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { *原创 2016-12-15 19:56:03 · 407 阅读 · 0 评论 -
lintcode,二叉树的后序遍历
给出一棵二叉树,返回其节点值的后序遍历。 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1] 挑战 你能使用非递归实现么?解题思路:递归方法容易实现。非递归考虑用两个栈,类似栈实现队列的思路,将二叉树后序入栈。 一刷ac/** * Definition of TreeNode: * public cl原创 2016-12-15 19:44:05 · 328 阅读 · 0 评论 -
lintcode,螺旋矩阵
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。 样例 给定如下矩阵: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 应返回 [1,2,3,6,9,8,7,4,5]。一刷没acpublic class Solution { /** * @param matrix a ma原创 2016-12-15 13:11:32 · 382 阅读 · 0 评论 -
lintcode,合并两个排序链表
将两个排序链表合并为一个新的排序链表 样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。解题思路:用一个fakenode作为返回,每次判断两个链表节点大小关系。 一刷ac/** * Definition for ListNode. * public class ListNode { * int val原创 2016-12-15 10:01:09 · 211 阅读 · 0 评论 -
翻转链表,lintcode
翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null一刷ac/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val原创 2016-12-15 11:00:35 · 212 阅读 · 0 评论 -
lintcode,单词切分
给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。解题思路:如果字符串长度为n,字典大小为k,用一个dp数组保存前i个字符能否切分,如果按照字符串做遍历,每次判断一段子串是否在字典中,复杂度是n^2,如果每次从字典中拿出一个元素和子串比较则复杂度是nk。 一刷acnkpublic class Solution { /** * @param原创 2016-12-21 14:19:03 · 1756 阅读 · 0 评论 -
lintcode,带最小值操作的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。解题思路:用一个栈专门存储最小值。 一刷acpublic class MinStack {public Stack<Integer> stack;public Stack<Integer> minstack; public M原创 2016-12-15 13:27:58 · 374 阅读 · 0 评论 -
二叉树的层次遍历,lintcode
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ]解题思路:用一个队列实现,队列保存每层的节点,以此遍历每层。 一刷ac/** * Definition of原创 2016-12-15 14:57:31 · 1746 阅读 · 0 评论 -
lintcode,把排序数组转换为高度最小的二叉搜索树
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 样例 给出数组 [1,2,3,4,5,6,7], 返回4 / \ 2 6 / \ / \ 1 3 5 7解题思路:递归实现 一刷ac/** * Definition of TreeNode: * public class TreeNode { * public int原创 2016-12-15 15:47:00 · 296 阅读 · 0 评论 -
lintcode,装最多水的容器
给定 n 个非负整数 a1, a2, …, an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。 样例 给出[1,3,2], 最大的储水面积是2.一刷没ac 解题思路:这种题是有特点的,在两端设置指针向中间夹,小的数向中间靠,因为想让结果更大不可能停留在小原创 2016-12-21 15:02:58 · 361 阅读 · 0 评论 -
lintcode,等价二叉树
检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。一刷ac 解题思路:用递归和非递归分别实现。都是细节问题,递归判断两个节点是否全不为空,是否值相等,一集左右子树是否等价。非递归用两个栈存两个数的节点,每次存放一个节点,并判断另一个树能不能做相同的存放。 递归实现/** * Definition of TreeNode: * pu原创 2016-12-21 16:57:27 · 368 阅读 · 0 评论 -
lintcode,排序列表转换为二分查找树
给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树一刷ac 解题思路:递归实现,需要注意的是链表长度,递归的时候将链表切开。/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { *原创 2016-12-15 16:45:54 · 351 阅读 · 0 评论 -
lintcode,字符串全排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。解题思路:将字符串分为第一个字符和后面部分,然后递归或者dfs。import java.util.ArrayList;import java.util.HashSet;import java.util.Collections原创 2016-12-18 13:16:37 · 464 阅读 · 0 评论 -
lintcode,连续子数组求和
给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, 1, 3, -3, 4], 返回[1,4].解题思路:类似最大子数组的思路,需要注意的是索引合适改变,start在sum改变时改变,end一直改变,但是只在max发生改变时纪录下start和end。一刷acpubli原创 2016-12-18 16:31:17 · 370 阅读 · 0 评论 -
lintcode,翻转链表 II
翻转链表中第m个节点到第n个节点的部分 样例 给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null 挑战 在原地一次翻转完成一刷ac 解题思路:注意细节,和翻转链表类似,将链表分割为三部分,中间部分为要翻转的部分,然后拼接。/** * Definition for ListNode * public class Lis原创 2016-12-24 15:54:59 · 354 阅读 · 0 评论 -
lintcode,生成括号
给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。 样例 给定 n = 3, 可生成的组合如下: “((()))”, “(()())”, “(())()”, “()(())”, “()()()”一刷没ac 解题思路:类似dp的思想,考虑n个括号是有n-1生成来的,相当于将所有n-1拆为两部分,再加入一个括号。public class Solution { /*原创 2016-12-22 14:53:08 · 344 阅读 · 0 评论 -
合并k个排序链表,lintcode
合并k个排序链表,并且返回合并后的排序链表。尝试分析和描述其复杂度。解题思路:过程分为三步,第一步将排序过程分为左右两个部分,因此需要对链表分治,第二步在分治的链表内排序,第三步合并链表。 一刷没ac/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; *原创 2016-12-21 13:09:22 · 270 阅读 · 0 评论 -
lintcode,链表排序
在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。 样例 给出 1->3->2->null,给它排序变成 1->2->3->null.解题思路:根据要求采用先sort再merge的方法,首先找到中点,然后从中点两端分别sort,将两个结果进行merge。一刷ac/** * Definition for ListNode. * public class ListNode {原创 2016-12-13 21:03:29 · 1517 阅读 · 0 评论 -
215. Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example, Given [3,2,1,5,6,4] and k = 2, return 5. No原创 2017-02-26 13:28:00 · 176 阅读 · 0 评论 -
153. Find Minimum in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You may assume no duplicate exist原创 2017-03-18 17:15:48 · 340 阅读 · 0 评论 -
寻找旋转排序数组中的最小值 II
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。数组中可能存在重复的元素。 样例 给出[4,4,5,6,7,0,1,2] 返回 0public class Solution { /** * @param num: a rotated sorted array * @retur原创 2017-03-18 21:13:28 · 280 阅读 · 0 评论 -
lintcode,搜索二维矩阵
写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。 每行的第一个数大于上一行的最后一个整数。 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true 挑战 O(log(n) + log(m))原创 2016-12-24 15:09:07 · 296 阅读 · 0 评论 -
翻转链表 II
翻转链表中第m个节点到第n个节点的部分 样例 给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null挑战 在原地一次翻转完成/** * Definition for ListNode * public class ListNode { * int val; * ListNode next; *原创 2017-03-19 09:56:36 · 214 阅读 · 0 评论 -
删除链表中倒数第n个节点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.挑战 O(n)时间复杂度/** * Definition for ListNode. * public class ListNode { * int val; * Lis原创 2017-03-19 10:19:31 · 318 阅读 · 0 评论 -
最大子数组 II
给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。 每个子数组的数字在数组中的位置应该是连续的。 返回最大的和。 注意事项 子数组最少包含一个数样例 给出数组 [1, 3, -1, 2, -1, 2] 这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7 挑战 要求时间复杂度为 O(n)publi原创 2017-07-15 16:51:49 · 409 阅读 · 0 评论 -
lintcode,寻找旋转排序数组中的最小值
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 你可以假设数组中不存在重复的元素。 样例 给出[4,5,6,7,0,1,2] 返回 0一刷ac 解题思路:把中点位置拿出来和两端比较,但是实际上为了找到最小值只需要让中点和最右点比较即可。public class Solution { /原创 2016-12-24 17:13:58 · 234 阅读 · 0 评论 -
lintcode,LRU缓存策略
为最近最少使用(LRU)缓存策略设计一个数据结构,它应该支持以下操作:获取数据(get)和写入数据(set)。 获取数据get(key):如果缓存中存在key,则获取其数据值(通常是正数),否则返回-1。 写入数据set(key, value):如果key还没有在缓存中,则写入其数据值。当缓存达到上限,它应该在写入新数据之前删除最近最少使用的数据用来腾出空闲位置。解题思路:第一次做这个题没有思路原创 2016-11-30 09:54:32 · 1319 阅读 · 0 评论 -
lintcode,前序遍历和中序遍历树构造二叉树
根据前序遍历和中序遍历树构造二叉树. 注意事项 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3一刷ac。 解题思路:根据前序特点,找到跟节点,然后切分前序和中序,分别找左右跟节点。/** * Definition of TreeNode: * public class TreeNo原创 2016-12-24 16:13:47 · 265 阅读 · 0 评论 -
lintcode,落单的数 II
给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。一刷没ac 解题思路:将每个数字转成bit,每个数字出现n次的话,对应每一位的和模n一定会有一个余数,这个余数就是由出现一次的数字造成的,因此可以求解。public class Solution { /** * @param A : An integer array * @return原创 2016-12-18 21:54:14 · 778 阅读 · 0 评论