随笔分类 - LeetCode
摘要:二叉树的中序遍历 题目链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 面试的时候问这道题基本都是考察非递归的写法,但还是贴一下递归写法: 方法1:递归 var result []int func f(root *T
阅读全文
摘要:最长有效括号 题目链接:https://leetcode-cn.com/problems/longest-valid-parentheses/ 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s = "(()" 输出:2 解释:最长有效
阅读全文
摘要:和为k的子数组(map统计前缀和) 题目链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/ 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 示例 1: 输入:nums = [1,1,
阅读全文
摘要:旋转图像(找规律) 题目链接:https://leetcode-cn.com/problems/rotate-image/ 题目大意:将矩阵顺时针旋转90度,要求原地旋转,空间复杂度O(1) 先水平对折翻转,然后主对角线翻转 func rotate(matrix [][]int) { n:=len(
阅读全文
摘要:二叉树的序列化和反序列化 题目链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/ 题目大意:写两个函数,能够分别对二叉树进行序列化和反序列化 方法1:bfs 序列化:采用队列实现,根节点先入队,处理时按
阅读全文
摘要:删除二叉搜索树中的节点 题目链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/ 题目大意:删除指定key的节点,返回root 分析:树是二叉搜索树,要求返回后仍然保持搜索树的位置 二叉搜索树:根节点值大于左孩子值,根节点值小于右孩子值
阅读全文
摘要:课程表( 拓扑排序/dfs 判环) 题目链接:https://leetcode-cn.com/problems/course-schedule/ 题目大意:给定一个课程依赖关系图,比如课程A依赖课程B,课程B依赖课程C,按照上述的依赖关系,能否学习完所有的课程? 先学C,再学B,最后学A即可 方式1
阅读全文
摘要:LRU缓存 题目链接:https://leetcode-cn.com/problems/lru-cache/ 双向链表+map map用来确定链表中是否存在此key的节点 双向链表用来实际存储 每次get,都把get的节点放到链表头部 每次put,两种情况 key存在,更新value,此节点移到头部
阅读全文
摘要:二叉树的最近公共祖先 链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/ 题目大意:求p和q在root树上的公共祖先,p和q可以是自身的祖先 方法1: 归根结底还是分解成子问题,然后递归求解 针对树
阅读全文
摘要:二叉树最大路径和 题目链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/ 分析: 这个题目是求二叉树的最大路径和,要点有两个: 最大不能走回头路:从根节点延伸的路径,你不能走了左子树又掉过头来走右子树 最大路径不一定要经
阅读全文
摘要:力扣 二叉树展开为链表(dfs) 题目链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/ 题目的意思是按照其先序遍历的顺序将二叉树展开为链表,要求使用O(1)的内存空间,所以先排除先序遍历出存储起来再构造链表
阅读全文
摘要:力扣 验证二叉搜索树(dfs或中序遍历) 题目链接:https://leetcode-cn.com/problems/validate-binary-search-tree/ 题目的意思就是验证一棵树是不是二叉搜索树 二叉搜索树的特征就是左孩子值小于根节点值,右孩子值大于根节点值 解析: 方法1就是
阅读全文
摘要:力扣 组合总和(标准dfs) 题目链接:https://leetcode-cn.com/problems/combination-sum/ 题目的大致意思就是从一个没有重复元素的数组中,抽取任意个数其和要等于target,让你列出所有的组合方式 需要注意的是可选择多个同样的数组元素,无单个限制 解析
阅读全文
摘要:力扣 二叉树的直径(dfs) 题目链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/ 题目的意思是求二叉树的直径,就是从任意节点出发,到任意节点结束,最长的那一条路径,也就是这条路上经过节点的数量减去1就是最长直径 需要明确的是,
阅读全文
摘要:力扣 相交链表 题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists 题目大致意思就是判断两个链表有没有交点,有的话给出交点,没有的话返回null 要求是不能修改链表,并且时间复杂度为O(N+M),空间复杂度为O
阅读全文
摘要:力扣 括号生成(dfs+剪枝) 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 输入:n = 1 输出:["(
阅读全文
摘要:给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例 2: 输入: [3
阅读全文
摘要:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ] 说明
阅读全文
摘要:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,
阅读全文
摘要:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/first-missing-...
阅读全文