摘要:
在一篇由字符构成的长文中查找另一个短字符串出现的位置,这可以算是编程领域最最常见的问题(比如按下 Ctrl + F 就可以打开你浏览器的查找功能)。这个问题叫做字符串的模式匹配,我们把被查找的关键词叫做模式串,被查找的全文叫做主串。注意:本文的下标均从 0 开始。 当我们用最容易想到的朴素的暴力解法 阅读全文
摘要:
我们知道,对于一个二叉树,如果我们我们知道他的前(或后)序遍历和中序遍历,那就可以直接构造还原出完整的二叉树。中序遍历很重要。 那么给定一个树的前序遍历和后序遍历,能不能构造出这个树呢?一般是不行的,参考往期文章 https://www.cnblogs.com/ofnoname/p/16864200 阅读全文
摘要:
日期处理是软件开发中最最常见的一项需求,尤其是在需要计算不同日期之间天数差异的场景下。准确处理日期,主要是考虑了闰年、月份天数变化等因素之后。 我们首先定义了一个Date结构,包含年、月、日三个成员变量。结构体简单明了,适用于存储日期信息: struct Date { int y, m, d; }; 阅读全文
摘要:
在算法与数据结构的经典问题中,最长公共子序列(Longest Common Subsequence,简称 LCS)问题占据着重要的地位。给定两个序列,我们需要找到它们最长的公共子序列,而子序列要求保持原序列元素的顺序但不需要连续。LCS 问题在文本比较、生物信息学中的基因序列比对等领域有着广泛的应用 阅读全文
摘要:
链表的觉醒 想象一串珍珠项链——每个节点优雅地牵着下一个节点的手。这种单向的、线性的、链表最本真的特性:插入与删除的瞬时性 \(O(1)\)。但当需要寻找特定节点时,我们不得不 \(O(n)\)遍历。 为链表赋予有序性,我们就可以维护一个有序的结合。使用有序数组维护有序集合,插入删除将移动大量元素; 阅读全文
摘要:
排列,字典序与下一排列 假设你有一个数组或序列,下一个排列是指在字典序上比当前排列更大的排列。如果当前排列已经是最大的排列,那么下一个排列是最小的排列。 例如,给定一个数组 [1, 2, 3],它的下一个排列是 [1, 3, 2];再下一个是[2, 1, 3];而对于 [3, 2, 1],它已经是最 阅读全文
摘要:
“jpg”和“jpeg”实际上指的是同一种图片压缩格式——JPEG(Joint Photographic Experts Group)格式。最初命名时用了“JPEG”,但在早期的Windows系统(如MS-DOS)中,文件扩展名只能有三个字符,因此“JPEG”被缩写为“JPG”。 而在扩展名字符数不 阅读全文
摘要:
Python 开发的困境 Python 是当今最流行的语言之一。但其在开发上存在一些天然缺陷。在 Python 开发中,若仅使用全局 Python 环境,会面临问题: 不同项目可能依赖不同版本的 Python 和不同版本的各类库,在全局环境下,版本冲突问题难以避免,比如一个项目需要某个库的旧版本以维 阅读全文
摘要:
前文回顾:https://www.cnblogs.com/ofnoname/p/18731222 想象你是一家快递公司的调度员,每天的任务是将货物从仓库高效送到客户。你设计了一条完美路线:每辆卡车都走最短路径,运费最省,按时送达——直到有一天,某个司机突然上报了一个诡异的现象: “老板,我的卡车在某 阅读全文
摘要:
我们已经了解最大流问题,其目标是通过网络中的各条边传输流量,尽可能地从源点流向汇点。通过经典的算法,如 Ford-Fulkerson 增广,我们能够找到一种方式,最大化从源点到汇点的流量。 然而,最大流问题的基本形式并没有考虑流动的成本。一个图的最大流值是一个固定数,可以由多种算法算出来,但具体流法 阅读全文