Fork me on GitHub

随笔分类 -  数据结构

摘要:设计一个支持以下两种操作的数据结构:void addWord(word) bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。示例:addWord("bad") a... 阅读全文
posted @ 2019-01-17 17:26 lMonster81 阅读(251) 评论(0) 推荐(0)
摘要:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 tru... 阅读全文
posted @ 2019-01-17 17:25 lMonster81 阅读(140) 评论(0) 推荐(0)
摘要:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3 输出: 1->2->3->4示例 2:输入: -1->5->3->4->0 输出: -1->0->3->4->5 不推荐: class Solution ... 阅读全文
posted @ 2019-01-13 19:27 lMonster81 阅读(133) 评论(0) 推荐(0)
摘要:给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 ... 阅读全文
posted @ 2019-01-12 11:01 lMonster81 阅读(111) 评论(0) 推荐(0)
摘要:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 把从m到n的反转,然后再接上去。 clas... 阅读全文
posted @ 2019-01-12 10:59 lMonster81 阅读(139) 评论(0) 推荐(0)
摘要:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1:输入:[1,1,1,1,1,null,1] 输出:true示例 2:输入:[2,2,2,5,2] 输出:false 提示:给定... 阅读全文
posted @ 2019-01-03 21:18 lMonster81 阅读(113) 评论(0) 推荐(0)
摘要:给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节... 阅读全文
posted @ 2019-01-01 22:06 lMonster81 阅读(259) 评论(0) 推荐(0)
摘要:我们可以为二叉树 T 定义一个翻转操作,如下所示:选择任意节点,然后交换它的左子树和右子树。只要经过一定次数的翻转操作后,能使 X 等于 Y,我们就称二叉树 X 翻转等价于二叉树 Y。编写一个判断两个二叉树是否是翻转等价的函数。这些树由根节点 root1 和 root... 阅读全文
posted @ 2018-12-31 20:39 lMonster81 阅读(98) 评论(0) 推荐(0)
摘要:给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。二叉搜索树保证具有唯一的值。 示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15 输出:32示例 2:输入:root = [10,5,1... 阅读全文
posted @ 2018-12-31 20:37 lMonster81 阅读(135) 评论(0) 推荐(0)
摘要:牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。 如果牌组中仍有牌,则将下一张处于牌组... 阅读全文
posted @ 2018-12-25 22:47 lMonster81 阅读(194) 评论(0) 推荐(0)
摘要:给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,... 阅读全文
posted @ 2018-12-17 16:42 lMonster81 阅读(92) 评论(0) 推荐(0)
摘要:给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。示例:输入: 3输出: [ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3] ... 阅读全文
posted @ 2018-12-11 19:45 lMonster81 阅读(93) 评论(0) 推荐(0)
摘要:树结构的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {... 阅读全文
posted @ 2018-12-04 21:00 lMonster81 阅读(444) 评论(0) 推荐(0)
摘要:给定一个二叉树,返回它的 后序 遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归:class Solution {public: vector res; vector postorderTraversal(TreeNode* root) { ... 阅读全文
posted @ 2018-12-04 20:36 lMonster81 阅读(103) 评论(0) 推荐(0)
摘要:您需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9 输出: [1, 3, 9] class Solution {public: vector largestValues(TreeNode* root) { ... 阅读全文
posted @ 2018-12-04 20:34 lMonster81 阅读(108) 评论(0) 推荐(0)
摘要:给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入: 2 / \ 1 3 输出: 1 示例 2:输入: 1 / \ 2 3 / / \ 4 5 6 / 7 输出: 7 注意: 您可以假设树(即给定的根节点)不为 NULL。 class Solution {p... 阅读全文
posted @ 2018-12-04 20:33 lMonster81 阅读(90) 评论(0) 推荐(0)
摘要:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 先求深度,中序遍历或者前序遍历都可以 class Solution {public:... 阅读全文
posted @ 2018-12-01 21:12 lMonster81 阅读(111) 评论(0) 推荐(0)
摘要:实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。 二叉树的中序遍历class... 阅读全文
posted @ 2018-12-01 21:11 lMonster81 阅读(119) 评论(0) 推荐(0)
摘要:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 方法一:class Solution {public: RandomListNode *copyRandomList(RandomList... 阅读全文
posted @ 2018-11-29 23:59 lMonster81 阅读(125) 评论(0) 推荐(0)
摘要:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题? 方法一:使用map方法二:分两个步骤,首先通过快慢指针的方法判断链表是否有环;如果有环,则寻找入环的第一个节点。具体的方... 阅读全文
posted @ 2018-11-29 22:48 lMonster81 阅读(76) 评论(0) 推荐(0)

/*评论*/ /*top按钮*/

/* 网易云控件 */