随笔分类 - LeetCode Hot100
摘要:原题(Medium): 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: ro
阅读全文
摘要:原题(Medium): 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 思路:动态规划 如果某一个点 [i][j] 的值为1,我们不妨可以假设它是一个正方形的右下角,且另起一个数组dp,记录该点所在的正方形的边长,即使有可能它周围点都是0,但它自己本身也是一个边
阅读全文
摘要:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
阅读全文
摘要:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。
阅读全文
摘要:原题(Medium): 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习? 说明: 输入的先决条件是由边
阅读全文
摘要:原题(Medium): 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 思路:递归 这题类型跟我们之前做过的一题单词搜索类似。所以我在看到这题之后,就想到了可以用与之
阅读全文
摘要:原题(Medium): 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 思路: 遍历数组时且逐元素相乘时,如果遇到了0,在求乘积最大值的情况下,0左边的元素与0右边的元素将不会产生任何联系,因为结果归零了。所以可以把数组看作是被0拆分的各个子数组,然后求其
阅读全文
摘要:原题(Medium): 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 思路:自底向上(bottom-to-up)、归并排序(Merge Sort) 题目对时间复杂度和空间复杂度做出了要求,常用的对数级别的排序方法不多,由于这里并不是双向链表,所以快排不太可能,可以使用归
阅读全文
摘要:原题(Medium): 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 写入数据 put(k
阅读全文
摘要:原题(Medium): 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 思路: 首先要考虑的
阅读全文
摘要:原题(Medium): 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 思路:动态规划 这题有个陷阱,需要特别注意,就是非空字符串s的字母
阅读全文
摘要:原题(Medium): 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 思路: 前序遍历,其数组的分布应为[根结点,左子树结点,右子树结点]。 中序遍历,其数组分布应为[左子树结点,根结点,右子树结点]。 那么,从前序遍历数组出发,第一个元素即为根结点的值,在中序
阅读全文
摘要:原题(Medium): 给定一个二叉树,原地将它展开为链表。 根据题意,原地展开的意思是,按照中序遍历的顺序(中左右)把二叉树的结点逐一放到树的右节点上。 思路: 我们已经知道,展开为链表后各节点顺序就是二叉树中序遍历的顺序,那么于一个节点而言,展开后,原本在其左子树节点肯定在原本其右子树的前面,例
阅读全文
摘要:原题(Medium): 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 思路:BFS 看到这题的时候,我思索了一会才得出要用队列BFS方式记录同层结点这个结论,脑子着实太迟钝了...... 想出来后就立马开始写代码: 有一说一,这段代码写得甚是难看,说明我的
阅读全文
摘要:原题(Medium): 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 这题我的第一感觉就是深度搜索,比较根结点与左子结点和右子结点的值,根据
阅读全文
摘要:原题(Medium): 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 我们或许可以先从数学的角度去思考这题,给定一个整数n,我们可以试着从根结点出发,此时根结点占去一个结点数,结点总数剩下n-1,那么剩下的结点数我们可以先考虑两种简单的情况,一是全部放左子树,二是全部放右
阅读全文
摘要:原题(Medium): 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 思路:回溯 建立一个xy坐标系,通过4个坐标实现在网格中上下左右地逐格移动
阅读全文
摘要:原题(Medium): 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 思路一:回溯 深度优先,从单一数组成员出发,以下标为剪枝条件,即不能搜索时不能小于当前下标,这防止了重复子集的出现,且途中把遇到的元素都加入临时数组,并把临时数组加入
阅读全文

浙公网安备 33010602011771号