01 2023 档案

摘要:问题描述 https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 解题思路 这个题目,用一个数组就能很好的解决。但空间复杂度是O(n). 题目中给的进阶要求,是要空间复杂度为O(1),所以这就要求我们在 阅读全文
posted @ 2023-01-30 17:26 BJFU-VTH 阅读(24) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/path-sum-ii/description/ 解题思路 首先,我们设置一个容器存储最终的结果。 其次,我们在遍历过程中,更新数组。 然后,在叶子结点处判断是否加入。 代码 # Definition for a binary tr 阅读全文
posted @ 2023-01-29 12:40 BJFU-VTH 阅读(22) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/recover-binary-search-tree/description/ 解题思路 二叉搜索树的中序遍历一定是一个有序的序列。 题目中说两个节点的值被交换了,即我们中序遍历得到的二叉搜索树是无序的,但交换两个节点即为有序。 所 阅读全文
posted @ 2023-01-29 11:38 BJFU-VTH 阅读(11) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/validate-binary-search-tree/description/ 解题思路 二叉搜索树的性质是:root节点要大于左子树的最大值,小于右子树的最小值。 同时,对上层,也要更新本层的最大值和最小值以供继续递归。 补充: 阅读全文
posted @ 2023-01-29 11:13 BJFU-VTH 阅读(21) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/binary-tree-paths/description/ 解题思路 叶子结点时,添加到结果序列即可。 代码 # Definition for a binary tree node. # class TreeNode: # def 阅读全文
posted @ 2023-01-28 19:41 BJFU-VTH 阅读(18) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/invert-binary-tree/description/ 解题思路 没啥好说的,python的交换简单极了。 代码 # Definition for a binary tree node. # class TreeNode: 阅读全文
posted @ 2023-01-28 17:50 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/binary-tree-postorder-traversal/description/ 解题思路 这个题和先序一样,没啥好说的。 代码 # Definition for a binary tree node. # class Tr 阅读全文
posted @ 2023-01-28 17:46 BJFU-VTH 阅读(10) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 解题思路 二叉树的先序遍历,没啥好说的。中-左-右。 先序中序后序 说的是中在哪里。 代码 # Definition for a binary 阅读全文
posted @ 2023-01-28 17:40 BJFU-VTH 阅读(13) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/path-sum/description/ 解题思路 我们可以对叶子结点进行判断,如果叶子结点的值等于targetSum,那么就算是找到了。 代码 # Definition for a binary tree node. # cla 阅读全文
posted @ 2023-01-28 17:35 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 解题思路 这个题目不难,但对退出条件要求高。 经过对题意的分析,我们对于root为None的情况,以及root为叶子结点的情况,以及root只有左子 阅读全文
posted @ 2023-01-28 16:24 BJFU-VTH 阅读(16) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/balanced-binary-tree/description/ 解题思路 这题一开始朴素的思路就是,对于每个节点,都计算其是不是平衡二叉树。 计算平衡二叉树的方式是对其求高度。 这会导致我们搜索了2次。 然而我们可以在一次搜索中 阅读全文
posted @ 2023-01-28 15:56 BJFU-VTH 阅读(13) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 解题思路 二叉树的最大深度,等于左子树的深度和右子树深度的较大值加1(即本层深度). 代码 # Definition for a binary tr 阅读全文
posted @ 2023-01-28 15:32 BJFU-VTH 阅读(17) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/symmetric-tree/description/ 解题思路 这个题,一看就是递归。既然如此,我们按照递归的一般思路来看,即问题的定义即为问题的解。 这个题目看似复杂,实际就是在求左子树的左孩子等于右子树的右孩子,左子树的右孩子 阅读全文
posted @ 2023-01-28 15:21 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/same-tree/description/ 解题思路 相同的树,意思就是树的结构和值都是相同的。 根据这点,可以写出代码。 代码 # Definition for a binary tree node. # class TreeN 阅读全文
posted @ 2023-01-28 12:05 BJFU-VTH 阅读(21) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/binary-tree-inorder-traversal/description/ 解题思路 二叉树的中序遍历。其实深搜和递归是一个道理。搜索必然要通过递归来实现。 中序遍历其实就是: 递归遍历左子树 操作 递归遍历右子树 代码 阅读全文
posted @ 2023-01-28 11:59 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/counting-bits/description/ 解题思路 这个题目,看上去是一个动态规划问题。 用dp[i]代表i中1的个数。但我没想明白怎么写状态转移方程。 多写了几组数据,发现有如下规律: 2-->0 3-->1 4--> 阅读全文
posted @ 2023-01-17 11:35 BJFU-VTH 阅读(16) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/longest-palindromic-substring/description/ 解题思路 如果一个字符串是回文串,那么它左边接上一个字符,右边接上一个字符,如果这两个字符相等,那这个长字符串必然是回文串。 所以,我们可以从原来 阅读全文
posted @ 2023-01-15 18:17 BJFU-VTH 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 解题思路 买卖股票的最佳时机是一个系列,这是最简单的一个题目。 首先我们定义一个dp数组,数组中元素的含义是,dp[i]代表了第i天为止能够获 阅读全文
posted @ 2023-01-15 17:58 BJFU-VTH 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/pascals-triangle-ii/description/ 解题思路 没啥好说的,跟118没区别。 代码 class Solution: def getRow(self, rowIndex: int) -> List[int] 阅读全文
posted @ 2023-01-15 17:42 BJFU-VTH 阅读(12) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/pascals-triangle/description/ 解题思路 杨辉三角可以用动态规划来解决,但它的解题思路跟一般的DP不一样,一般的DP只有一个数组,它牵扯到多个数组。 它的状态转移方程是:res[cur][j] = res 阅读全文
posted @ 2023-01-15 17:34 BJFU-VTH 阅读(23) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/climbing-stairs/description/ 解题思路 这是一个典型的动态规划题。记住,任何可以用递归解决的问题,就可以用动态规划解决。 动态规划最重要的是想清楚状态转移方程和退出条件(是不是跟递归很像)。 在这个题目里 阅读全文
posted @ 2023-01-15 17:24 BJFU-VTH 阅读(31) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 解题思路 这是一个长度不定的滑动窗口。 我们需要设置一个left指针和right指针,分别指向滑动窗口的左边界和右边界。 我们判定当前的滑动窗口是否满足题 阅读全文
posted @ 2023-01-15 17:13 BJFU-VTH 阅读(34) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/repeated-dna-sequences/description/ 解题思路 这同样是一个滑动窗口的典型问题。 首先我们看一下数据规模,进行一下异常处理。 我们设置一个res用来存储最后的结果,一个se用来存储遍历过的字符串,方 阅读全文
posted @ 2023-01-15 13:06 BJFU-VTH 阅读(12) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/contains-duplicate-ii/description/ 解题思路 这道题目是一个经典的滑动窗口题。 常规解法,注意边界值就行。 注意我们应该完全模拟滑动窗口,以防出现复杂度O(n的平方)的情况。 代码 class So 阅读全文
posted @ 2023-01-15 12:50 BJFU-VTH 阅读(12) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/description/ 解题思路 这个题目要求用logn的算法,那只能是二分了。 二分的时候,我们要讲究策略。首先,我们要找旋转数组中的最小值。我们先分析数 阅读全文
posted @ 2023-01-12 11:32 BJFU-VTH 阅读(52) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/search-a-2d-matrix/description/ 解题思路 我们可以确定,数据是有序的。所以我们有2种办法用二分来解决。 第一种,我们可以写个下标映射函数,把矩阵当做一维数组来进行遍历。 第二种,我们可以先对列进行二分 阅读全文
posted @ 2023-01-12 00:20 BJFU-VTH 阅读(14) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/ 解题思路 我们查找元素的第一个和最后一个元素的位置,题目要求logn,所以只能用二分。 我们用 阅读全文
posted @ 2023-01-12 00:03 BJFU-VTH 阅读(23) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/search-in-rotated-sorted-array/description/ 解题思路 这个题目要求复杂度了。我们不要慌,首先分析一下数据。 也就是说,这个数组是由2个上升子序列组成的。所以,我们如果用传统的二分法,是不太 阅读全文
posted @ 2023-01-11 19:55 BJFU-VTH 阅读(22) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/missing-number/description/ 解题思路 这个题目,可以先排序,然后找到最左侧的下标和数值不匹配的一个。 没啥好说的,常规二分。 不过,一般的二分都是3个分支,分别是等于,小于,大于。 但这个题目不一样,这个 阅读全文
posted @ 2023-01-11 16:56 BJFU-VTH 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/sqrtx/description/ 解题思路 这个题目,可以用1到x来进行二分。 对照上一题的解题思路,当我们不知道最后应该返回什么的时候,就去想mid == left == right的时候,我们应该返回什么。 代码 class 阅读全文
posted @ 2023-01-11 16:39 BJFU-VTH 阅读(26) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/search-insert-position/description/ 解题思路 搜索插入位置,是一个常见的二分算法。 二分是有固定模板的。这个题目是搜索插入位置,和最简单的二分不同。 不同之处在于,它在查找失败时不返回False, 阅读全文
posted @ 2023-01-10 22:58 BJFU-VTH 阅读(25) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/ 解题思路 买卖股票,本质上就是低价买入,高价卖出。我们可以用模拟法,不断的去找到一个递增的区间,然后去相加。 但这题还可以用贪心做。贪心 阅读全文
posted @ 2023-01-10 22:37 BJFU-VTH 阅读(21) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/jump-game/description/ 解题思路 对这个题目进行贪心,对于每个格子,我们都可以求出从它可以跳到最远的那个格子。 我们用一个t_maxs变量来保存这个数据。 当我们遍历到某个格子时,发现t_maxs够不到,则证明 阅读全文
posted @ 2023-01-10 21:57 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/jump-game-ii/ 解题思路 这个题目,乍一看挺难,其实我们想一下就可以知道,我们如果从后往前推,有潜质跳到最后一个数字的格子,且有潜质跳跃次数最短的,应该是所有符合条件的格子中最靠左的。 根据这个结论,我们可以用贪心思想, 阅读全文
posted @ 2023-01-10 21:30 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/container-with-most-water/description/ 解题思路 首先,我们考虑暴力法。暴力法是O(n的平方). 然后对暴力法进行优化。我们发现了如下规律: 首先要记住,决定能盛多少水的,是短的那个板,而不是长 阅读全文
posted @ 2023-01-10 17:33 BJFU-VTH 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/valid-palindrome-ii/description/ 解题思路 这题可以用贪心。贪心的思路是,我们假定遇到的第一个不匹配的字符,删掉就是有可能使我们达成目标的解。 我们双指针法 可以很快的解决这个问题。 代码 class 阅读全文
posted @ 2023-01-10 15:34 BJFU-VTH 阅读(22) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/can-place-flowers/description/ 解题思路 这题是种左不种右的,我们要求,如果不是边界,则自己本身不是1,而且左右也不能是1. 如果是边界,则自己不是1,且相邻的也不是1. 代码 class Soluti 阅读全文
posted @ 2023-01-10 14:41 BJFU-VTH 阅读(14) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/array-partition/description/ 解题思路 这个题目很有意思。其中的思想依然是贪心。我们要去想,在一个小的数对中,我们应该怎么样才能收益最高呢。 我们首先挑选最大的数,由于我们要进行min操作,如果让min收 阅读全文
posted @ 2023-01-10 13:46 BJFU-VTH 阅读(25) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/assign-cookies/description/ 解题思路 这个题目,同样可以运用贪心的思路。 我们首先进行排序。对孩子需要的饼干大小,和能够提供的饼干大小都做一个排序。 遍历孩子,在孩子中,遍历饼干(可以设置一个变量记住当前 阅读全文
posted @ 2023-01-10 11:41 BJFU-VTH 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/longest-palindrome/description/ 解题思路 这题被划分在了贪心tag下面。 贪心算法解题有个前提条件,就是说我们能够找到局部的最优解。然后将局部最优解组合起来,得到全局的最优解。 这个题目,明显可以用贪 阅读全文
posted @ 2023-01-10 11:31 BJFU-VTH 阅读(19) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/decode-string/description/ 解题思路 这题一看就是个典型的递归题目,典型的递归函数的定义就是递归函数的解。 我们首先定义递归函数的参数和返回值。 递归函数的参数显然就是一个字符串,递归函数的返回值是经过计算 阅读全文
posted @ 2023-01-10 00:24 BJFU-VTH 阅读(32) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/elimination-game/ 解题思路 这题需要推理,和约瑟夫环一样。我暂时不想去深入研究,只想用模拟。 这题其实可以用递归来解,因为他每一层的处理方式几乎一模一样。 我们首先看参数和返回值。我们期望接收到一个数组和一个fla 阅读全文
posted @ 2023-01-09 23:21 BJFU-VTH 阅读(30) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/different-ways-to-add-parentheses/description/ 解题思路 这个题目是一个典型的递归问题,也是一个典型的分治问题。我们讲过,递归问题的定义就是递归的解。 首先我们考虑这个递归函数的定义,参 阅读全文
posted @ 2023-01-06 19:50 BJFU-VTH 阅读(18) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/reorder-list/description/ 解题思路 这题其实用list + 双指针模拟。很简单。 但我们要练习的是递归。 这题我本来是想用递归的方式进行模拟,但出了点问题。发现如果这样实现会有循环引用问题。 本着有简单的不 阅读全文
posted @ 2023-01-06 19:11 BJFU-VTH 阅读(26) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/powx-n/description/ 解题思路 这个题目具有缩小规模的潜质,所以可以用递归来进行解决。 为啥呢?因为幂本质上就是乘法。 2的3次幂,就是2*2*2。所以,我们要做的就是减少乘法的次数。 比如2的10次幂,它其实等于 阅读全文
posted @ 2023-01-06 11:20 BJFU-VTH 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 解题思路 首先这是个递归问题,因为它可以明显的缩小问题规模。既然是递归的问题,那我们按照递归的一般思路来。 首先,我们考虑递归函数的参数和返回值。 因为这个题目和上一 阅读全文
posted @ 2023-01-06 01:04 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/add-two-numbers/description/ 解题思路 这题是倒着存储的,也要求我们返回一个倒着的链表。 即它需要我们左对齐,相加之后向后进位,但需要我们返回最左侧的结果节点。 看起来这也是个缩小规模的问题。 首先,我们 阅读全文
posted @ 2023-01-05 22:53 BJFU-VTH 阅读(37) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/hanota-lcci/description/ 解题思路 首先我们要定义递归函数。汉诺塔问题是典型的递归问题(缩小规模,小规模问题是大规模问题的子集),而且是典型的递归的定义就是递归的解的问题。 首先,我们定义一个汉诺塔函数,参数 阅读全文
posted @ 2023-01-05 18:52 BJFU-VTH 阅读(35) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/description/ 解决方案 首先,这题有更简洁的解法,但我的脑子不够用,我只会模拟。所以就只写模拟。 首先,按照解递归的一般思 阅读全文
posted @ 2023-01-05 12:57 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/description/ 解题思路 参考这个 代码 # Definition for singly-linked list. # class Lis 阅读全文
posted @ 2023-01-04 11:48 BJFU-VTH 阅读(12) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/description/ 解题思路 参考上一个题目。 代码 class ListNode: def __init__(self, x): self.val = x self.next 阅读全文
posted @ 2023-01-04 11:42 BJFU-VTH 阅读(16) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/ 解题思路 首先看参数和返回值。参数为一个链表的头节点。返回值为一个逆序好的数组。 然后看本层做什么,以及怎么缩小规模。 本层要做 阅读全文
posted @ 2023-01-04 11:35 BJFU-VTH 阅读(14) 评论(0) 推荐(0) 编辑
摘要:问题描述 https://leetcode.cn/problems/fibonacci-number/description/ 解题思路 最经典的递归问题,它的问题描述就是递归的。 先考虑参数和返回值。参数就是n,返回值是fib(n)的值。 然后考虑本层做什么,以及缩小规模。 根据定义,本层就是将f 阅读全文
posted @ 2023-01-04 11:20 BJFU-VTH 阅读(33) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/power-of-four/description/ 解题思路 参考3的幂。 代码 class Solution: def isPowerOfFour(self, n: int) -> bool: if n <= 0: return 阅读全文
posted @ 2023-01-04 11:12 BJFU-VTH 阅读(16) 评论(0) 推荐(0) 编辑
摘要:问题链接 https://leetcode.cn/problems/power-of-three/description/ 解题思路 这是一个常规的递归问题。我们首先考虑参数和返回值。 参数显而易见是一个整数,返回值是是否为3的幂。 然后我们考虑本层做什么,和如何缩小问题规模。 如果n是3的幂,那n 阅读全文
posted @ 2023-01-04 11:06 BJFU-VTH 阅读(22) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/palindrome-linked-list/description/ 解题思路 这题是一个常规中带有一些递归的特殊用法的题目。我们按照递归的一般思路,首先考虑参数和返回值。 题目已经给出了显而易见的参数和返回值。参数为链表中的节点 阅读全文
posted @ 2023-01-04 10:41 BJFU-VTH 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/power-of-two/description/ 解题思路 首先,按照递归的一般思路,参数是一个整数,返回值是True or False,这个表明n到底是不是2的幂。 然后想,本层应该处理什么。(本层处理一般不需要考虑边界条件,只 阅读全文
posted @ 2023-01-03 11:42 BJFU-VTH 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/reverse-linked-list/description/ 解题思路 按照我们解递归的一般思路,首先确定参数和返回值。 从题意可以看出,参数是给定一个链表的头结点,返回值是一个逆序的链表。 然后,缩小问题规模的方式,在链表中, 阅读全文
posted @ 2023-01-03 11:10 BJFU-VTH 阅读(22) 评论(0) 推荐(0) 编辑
摘要:题目链接 https://leetcode.cn/problems/remove-linked-list-elements/description/ 解题思路 按照我们解决递归的思路,我们首先想,这个递归函数,应该返回什么,应该定义什么参数。 显而易见,递归要解决什么问题,就要返回什么参数。即,我们 阅读全文
posted @ 2023-01-03 10:29 BJFU-VTH 阅读(28) 评论(0) 推荐(0) 编辑