随笔分类 -  Algorithm Note

1
摘要:问题描述 给你一个字符串 s 和一个整数 k。 判断是否存在一个长度 恰好 为 k 的子字符串,该子字符串需要满足以下条件: 该子字符串 只包含一个唯一字符(例如,"aaa" 或 "bbb")。 如果该子字符串的 前面 有字符,则该字符必须与子字符串中的字符不同。 如果该子字符串的 后面 有字符,则 阅读全文
posted @ 2025-02-18 16:54 saulstavo 阅读(2) 评论(0) 推荐(0) 编辑
摘要:岛屿数量 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 问题分析 连通块个数,dfs或者bfs均可。 法一、dfs class So 阅读全文
posted @ 2025-02-16 17:39 saulstavo 阅读(0) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你一个字符串 s,最多 可以从中删除一个字符。 请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。 分析 相向指针,贪心,当遇到第一个l和r指向不同的字符时,跳过l或r指向的字符,判断余下的字符串是否回文即可。 class Solution { pu 阅读全文
posted @ 2025-02-04 21:16 saulstavo 阅读(2) 评论(0) 推荐(0) 编辑
摘要:问题描述 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。 法一 class Solution { pu 阅读全文
posted @ 2025-02-04 17:50 saulstavo 阅读(2) 评论(0) 推荐(0) 编辑
摘要:lintcode与leetcode有相似题目,参考https://www.1point3acres.com/bbs/thread-453640-1-1.html,由于原网页加载过慢,将其中各元素的iframe去掉,重新整理,得到下面的题目映射表。 LintCode Num LintCode Titl 阅读全文
posted @ 2025-02-04 17:04 saulstavo 阅读(17) 评论(0) 推荐(0) 编辑
摘要:问题描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 分析 树形DP,每次返回左 阅读全文
posted @ 2024-12-10 20:15 saulstavo 阅读(6) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 分析 使用递归解决比较简单,但是不太好实现 阅读全文
posted @ 2024-12-10 19:14 saulstavo 阅读(4) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 分析 暴力解法,枚举每个结点开始是否有符合题意的路 阅读全文
posted @ 2024-12-10 14:39 saulstavo 阅读(8) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 分析 逻辑上,从前序遍历中依次从前往后获取根结点,从中序里获取根结点的序号后可以获取左子树和右子树,递归构建树即可。 阅读全文
posted @ 2024-12-10 14:08 saulstavo 阅读(6) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 分析 注意,这里应该使用同样的TreeNode,也就是 阅读全文
posted @ 2024-12-09 16:27 saulstavo 阅读(3) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 bfs树的层次遍历 同其他的一些题,使用for循环区分该层的结点,并记录每层的最后一个结点为答案即可。 class Solution { public: vector<int> 阅读全文
posted @ 2024-12-08 23:54 saulstavo 阅读(4) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 分析 已经给定BST,找出第k大的数字。 可以利用BST性质:中序遍历一定是升序数组,遍历到第k个结点即为答案,复杂度O(n) 注意,java中成员变量名与函数形参重名 阅读全文
posted @ 2024-12-06 13:35 saulstavo 阅读(8) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 分析 可以使用递归解决。要注意结点的左子树中每个结点都要小于当 阅读全文
posted @ 2024-12-04 19:40 saulstavo 阅读(10) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 分析 对于nullptr: 先判不空再入队 入队列后在for中判空,为空则continue 第一种更好,因为如果为空,即使continue也会影响全局,比如该题中res.push_back( 阅读全文
posted @ 2024-12-01 16:46 saulstavo 阅读(4) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。 分析 二叉查找树 Binary Search Tree,又叫:二叉搜索树,二叉排序树,其中序遍历是升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树 与二分有区别,二分是不断查找答案所在区域的 阅读全文
posted @ 2024-12-01 16:43 saulstavo 阅读(12) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 分析 由于该题不仅要考虑数据的轴对称,还要考虑结构的轴对称,例如 所以需要两个方向的递归同时进行,过程中比较对称结点的值是否相等。 class Solution { public: bool solve(TreeNode* l_ro 阅读全文
posted @ 2024-11-27 15:01 saulstavo 阅读(4) 评论(0) 推荐(0) 编辑
摘要:知识点 不同教材有差异,按照这个理解:层数从0开始,也就是根结点是第0层,树的深度=高度,都是最大层数 问题描述 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们 阅读全文
posted @ 2024-11-27 14:34 saulstavo 阅读(4) 评论(0) 推荐(0) 编辑
摘要:问题描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 法一、递归 单独递归函数,返回TreeNode* x,x是从当前层开始的逆转后的树的根结点 class Solution { public: TreeNode* solve(TreeNode* root) { if (r 阅读全文
posted @ 2024-11-26 18:24 saulstavo 阅读(6) 评论(0) 推荐(0) 编辑

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