background picture of the home page

Java炒饭

P46 全排列

本文介绍了一道关于全排列的算法题,使用深度优先搜索(DFS)解决。给定一个无重复数字的数组,要求返回所有可能的排列组合。作者通过递归实现DFS,利用标记数组`st`记录每个元素是否已被选入当前路径,避免重复选择。每次递归到达叶子节点时,将当前排列加入结果集。代码结构清晰,核心在于状态的回溯:每层递归尝试未使用的元素,递归返回后恢复状态。作者提到在LeetCode上不推荐使用全局变量,因此所有状态均通过参数传递,与竞赛编程习惯略有不同,初时稍感不适应。该解法时间复杂度为O(n!),适用于输入规模较小的情况。

thumbnail of the cover of the post

python数据分析

本文介绍了Python数据分析的核心工具NumPy,重点讲解其核心数据结构ndarray的特性与操作。ndarray具有多维性、同质性和高效性,支持向量化运算。文章详细说明了ndarray的属性(如shape、dtype、size等)、创建方法(如array、zeros、ones、full等)及数据类型管理。同时涵盖了索引与切片操作,包括一维和二维数组的常规切片、布尔索引和条件筛选。此外,简要提及Jupyter Notebook的常用快捷键和Anaconda环境,为后续使用Pandas和Matplotlib进行数据分析与可视化奠定基础。

thumbnail of the cover of the post

P44 通配符匹配

本文讲解力扣第44题“通配符匹配”,是一道典型的线性动态规划问题。给定字符串 `s` 和模式串 `p`,其中 `p` 包含普通字符、`?`(匹配任意单个字符)和 `*`(匹配任意字符串,包括空串),判断两者是否完全匹配。解法使用二维DP数组 `f[i][j]` 表示 `s` 的前 `i` 个字符与 `p` 的前 `j` 个字符是否匹配。初始化时考虑 `*` 可匹配空串,状态转移分三种情况:当 `p[j-1]` 为 `*` 时,可继承 `f[i][j-1]` 或 `f[i-1][j]`;否则若字符相等或为 `?`,则依赖 `f[i-1][j-1]`。最终结果为 `f[n][m]`。代码清晰地实现了该逻辑,时间复杂度为 O(nm)。

thumbnail of the cover of the post

P43 字符串相乘

本文讲解LeetCode“字符串相乘”问题的解法。作者指出该题属于高精度乘法,不能直接转换为整型计算以避免溢出。解法模拟竖式乘法过程:用两个嵌套循环处理每一位的相乘,并将结果累加到对应位置。随后统一处理进位,最后将结果数组转为字符串并去除前导零。代码使用C++实现,通过倒序遍历原字符串完成逐位运算,最终返回正确结果。关键细节包括进位处理和前导零的删除,确保输出格式正确。题目虽思路直观,但边界处理需谨慎。

thumbnail of the cover of the post

力扣P42 接雨水

本文介绍力扣经典题目“接雨水”的解法。通过双指针技巧,从数组两端向中间遍历,维护左右两侧的最大高度(lmax 和 rmax)。每次移动较小一侧的指针,该位置能接的雨水量为当前侧最大值减去其高度,并累加结果。核心思想是:每个位置能接的雨水由左右两边最大高度中的较小者决定。算法时间复杂度为 O(n),空间复杂度为 O(1),高效且易于实现。

thumbnail of the cover of the post

机器学习

本文介绍了机器学习的基本开发流程,包括数据获取、数据处理、特征工程、模型训练与评估五个关键步骤。常用数据集来源有sklearn、Kaggle和UCI。其中,sklearn提供了便捷的数据加载工具:`load_*`用于小规模数据集,`fetch_*`用于大规模数据集。通过数据训练得到模型的过程称为“学习”或“训练”。文中强调了Scikit-learn在机器学习中的重要作用,是实现算法和构建模型的核心工具。深度学习部分尚未完成,后续将补充相关内容。

thumbnail of the cover of the post