LeetCode题解
日常做题 leetcode 题解,每周三题
噢!不杰克
日常技术、问题分享,悠然自得、老实巴交的码农。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
96. 不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。原创 2023-04-24 17:58:55 · 557 阅读 · 0 评论 -
198. 打家劫舍
如果跳过那么 dp[i] = dp[i-1] ,跳过自然不能把 i 算在里面,dp[i-1]表示的是 0 - i-1 包括 i-1 以内最多可以偷窃到的金额,而不是一定要偷 i-1 房,那么如果不跳过,dp[i] = dp[i-2] + num[i] ,偷 i 那么就说明 不偷 i-1 ,必然是偷了 i -2 ,再加上咱们的 i ,就是dp[i] 最大的偷窃金额。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。原创 2023-04-07 11:34:07 · 481 阅读 · 0 评论 -
152. 乘积最大子数组
你想一下这里是连续子序列的乘积啊,注意我们 dp[i] 的定义,以第 i 个结尾的最大连续子序列的乘积,那么我们当前 i 的最大乘积 dp[i] = 前一个 * 当前值,举例,1,2,3,4.比如我们当前值是 3 ,那么它的前一个是 1。根据 dp[i] 的定义,很明显 dp[0] 应为 nums[0] 即dp[0] = nums[0]以此类推,其实就是默认三个数组都一样,maxF、minF、num。从递归公式我们可以看出 dp[i] 依赖与 dp[i-1] 所以 dp[0] 应该是多少呢?原创 2023-04-06 11:05:59 · 460 阅读 · 0 评论 -
148. 排序链表
因为 fast 指针每次移动的步数是 slow 指针的两倍,所以当 fast 指针到达链表末尾时,slow 指针刚好走到链表的中间位置。需要注意的是,当链表长度为偶数时,有两个中间节点,这种情况下可以选择返回其中任意一个节点,本题选择返回中间位置靠左的节点。2、将 slow 指针每次向后移动一步,将 fast 指针每次向后移动两步,直到 fast 指针到达链表末尾。1、将链表从中间分开,分成两个子链表,这里使用快慢指针找到中间节点位置。3、此时 slow 指针所指的节点就是链表的中间节点。原创 2023-03-23 15:26:34 · 528 阅读 · 0 评论 -
146. LRU 缓存
如果不存在,则向缓存中插入该组 key-value。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。双向链表用来维护节点之间的前后关系,并且链表头表示最近使用的节点,链表尾表示最久未使用的节点。每次插入一个节点时,我们将其插入到链表头,如果此时容量超过了上限,则删除链表尾的节点。哈希表用来存储每个关键字对应的节点,可以通过关键字 O(1) 查找到对应的节点。原创 2023-03-23 11:53:02 · 284 阅读 · 0 评论 -
139. 单词拆分
接下来我们枚举 i 从 1 到 n,对于每个 i,我们枚举 j 从 0 到 i-1,如果 dp[j] = true 且 s[j+1,i] 在字典中出现,那么 dp[i] =t rue。2、确定递推公式:对于dp[i],枚举 j 从 0 到 i-1,如果 dp[j] = true 且 s[j+1,i] 在字典中出现,那么dp[i] = true。1、确定dp数组(dp table)以及下标的含义:dp 长度为n+1,n为字符串s的长度,dp[i] 表示 s 的前 i 位能否被拆分为字典中的单词。原创 2023-03-23 11:13:37 · 509 阅读 · 0 评论 -
128. 最长连续序列
x+y 的连续序列,而我们重新从 x+1,x+2或者是 x+y 处开始尝试匹配,那么得到的结果肯定不会优于枚举 xx 为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。由于我们要枚举的数 x一定是在数组中不存在前驱数 x-1 的,如果存在,我们就会从 x-1 开始枚举了,而不是x,因此我们每次在哈希表中检查是否存在 x-1 即能判断是否需要跳过了,这也是 下面。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。原创 2023-03-15 16:00:01 · 180 阅读 · 0 评论 -
124. 二叉树中的最大路径和
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次。该路径 至少包含一个 节点,且不一定经过根节点。思路:求出二叉树中的走个的最大路径和,比如示例二,经过我们当前节点的最大路径和是。, 这里我们需要的是最大路径和,所以在 20 节点下选择最大的相加,那么就是。给你一个二叉树的根节点 root ,返回其 最大路径和。路径和 是路径中各节点值的总和。,我们只需要递归求出最大值即可。原创 2023-03-15 11:56:10 · 225 阅读 · 0 评论 -
114. 二叉树展开为链表
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。题解:我们可以发现展开的顺序就是二叉树的先序遍历(中左右),题目让我们把树的左子树插入到右子树中。,这一层的左子树置 null ,我们重复这个过程就 ok 了。因为我们要插入把左子树插入到右子树中,就需要。思路:怎么理解这个逐层遍历呢?也就是遍历我们的树,把树的。展开后的单链表应该与二叉树 先序遍历 顺序相同。原创 2023-03-15 10:51:06 · 350 阅读 · 0 评论 -
79. 单词搜索
79、单词搜索,Java 回溯解题思路原创 2023-03-09 14:55:23 · 150 阅读 · 0 评论
分享