随笔分类 -  课程 /

摘要:一、题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 二、思路 当前节点的值是其左子树的值的上界(最大值) 当前节点 阅读全文
posted @ 2022-12-29 15:34 ImreW 阅读(18) 评论(0) 推荐(0) 编辑
摘要:一、题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 二、思路 使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。 如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。 如果遇到的节点为灰色,则将节点的值输出。 三、代码 class Solu 阅读全文
posted @ 2022-12-28 13:18 ImreW 阅读(13) 评论(0) 推荐(0) 编辑
摘要:一、题目 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 二、思路 构建双指针距离: 前指针 former 先向前走 k 步(结束后,双指针 former 和 latter 间相距 k 步)。 三、代码 class Solutio 阅读全文
posted @ 2022-12-19 09:26 ImreW 阅读(12) 评论(0) 推荐(0) 编辑
摘要:一、题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 二、思路 定位节点: 遍历链表,直到 head.val == val 时跳出,即可定位目标节点。修改引用: 设节点 cur 的前驱节点为 pre ,后继节点为 cur.next ;则执行 pr 阅读全文
posted @ 2022-12-18 13:25 ImreW 阅读(14) 评论(0) 推荐(0) 编辑
摘要:一、题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 二、思路 三、代码 class Solution: def lengthOfLongestSubstring(self, s: str) -> int: dic = {} res = tmp = 0 for j 阅读全文
posted @ 2022-12-17 10:17 ImreW 阅读(12) 评论(0) 推荐(0) 编辑
摘要:一、题目 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 二、思路 三、代码 class Solution: def 阅读全文
posted @ 2022-12-16 11:32 ImreW 阅读(18) 评论(0) 推荐(0) 编辑
摘要:一、题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 二、思路 设 f(i,j)为从棋盘左上角走至 阅读全文
posted @ 2022-12-15 08:29 ImreW 阅读(17) 评论(0) 推荐(0) 编辑
摘要:一、题目 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 二、思路 若 dp[i−1]≤0,说明 dp[i−1]对 dp[i]产生负贡献,即 dp[i−1]+nums[i]还不如 nums[i]本身大。 当 dp[i−1]>0时:执 阅读全文
posted @ 2022-12-14 12:39 ImreW 阅读(17) 评论(0) 推荐(0) 编辑
摘要:一、题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 二、思路 原理: 以斐波那契数列性质 f(n+1)=f(n)+f(n−1)为转移方程 阅读全文
posted @ 2022-12-12 14:12 ImreW 阅读(22) 评论(0) 推荐(0) 编辑
摘要:一、题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前 阅读全文
posted @ 2022-12-11 18:31 ImreW 阅读(15) 评论(0) 推荐(0) 编辑
摘要:一、题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 二、思路 考虑从顶至底递归,判断每对节点是否对称,从而判断树是否为对称二叉树。 三、代码 class Solution: def isSymmetric(self, root: TreeNode 阅读全文
posted @ 2022-12-10 14:16 ImreW 阅读(12) 评论(0) 推荐(0) 编辑
摘要:一、题目 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二、思路 根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。 三、代码 class Solution: def mirrorTree(self, root: TreeNode) - 阅读全文
posted @ 2022-12-09 11:09 ImreW 阅读(10) 评论(0) 推荐(0) 编辑
摘要:一、题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 二、思路 先序遍历树 A 中的每个节点 nA;(对应函数 isSubStructure(A, B)) 判断树 A中 以 nA为根节点的子树 是否包含树 阅读全文
posted @ 2022-12-08 08:24 ImreW 阅读(26) 评论(0) 推荐(0) 编辑
摘要:一、题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。 二、思路 利用双端队列的两端皆可添加元素的特性,设打印列表(双端队列) tmp ,并规定: 奇数层 则添加至 tmp 尾部 , 偶数层 则 阅读全文
posted @ 2022-12-07 18:28 ImreW 阅读(17) 评论(0) 推荐(0) 编辑
摘要:一、题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 二、思路 每一层打印到一行 。 三、代码 class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not root: 阅读全文
posted @ 2022-12-06 09:05 ImreW 阅读(16) 评论(0) 推荐(0) 编辑
摘要:一、题目 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 二、思路 二叉树的 广度优先搜索(BFS)。 三、代码 class Solution { public int[] levelOrder(TreeNode root) { if(root == null) return 阅读全文
posted @ 2022-12-05 13:49 ImreW 阅读(17) 评论(0) 推荐(0) 编辑
摘要:一、题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的 阅读全文
posted @ 2022-12-03 12:43 ImreW 阅读(13) 评论(0) 推荐(0) 编辑
摘要:一、题目 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、思路 若 flag > target ,则 target 一定在 flag 所在 行 阅读全文
posted @ 2022-12-02 11:21 ImreW 阅读(21) 评论(0) 推荐(0) 编辑
摘要:一、题目 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 二、思路 循环二分: 当 left ≤ right 时循环 (即当闭区间 [left, j] 为空时跳出) ; 三、代码 阅读全文
posted @ 2022-12-01 19:17 ImreW 阅读(16) 评论(0) 推荐(0) 编辑
摘要:一、题目 统计一个数字在排序数组中出现的次数。 二、思路 整个数组是单调递增的,我们可以利用二分法来加速查找的过程。 三、代码 class Solution { public: int binarySearch(vector<int>& nums, int target, bool lower) { 阅读全文
posted @ 2022-11-30 19:10 ImreW 阅读(5) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示