铭记历史 致敬英雄——2025年9月3日抗战胜利80周年大阅兵纪实
历史的回响,盛世的礼赞2025年9月3日,金秋的北京阳光明媚,天安门广场红旗飘扬。这一天,中华民族以一场震撼世界的盛大阅兵,隆重纪念中国人民抗日战争暨世界反法西斯战争胜利80周年。中共中央总书记、国家主席、中央军委主席习近平检阅共和国武装力量,与各国来宾、各界代表共同见证这一历史性时刻。 新征程上的庄严宣示这次阅兵意义非凡,具有深刻的历史意义和现实意义: 全面推进中国式现代化的首次阅兵作为全面推进中国式现代化进入新征程的首次阅兵,这场盛典展现了新时代中国的崭新面貌。中华民族正以更加自信的姿态,向着第二个百年奋斗目标阔步前进。 人民军队奋进建军百年的崭新亮相距离建军百年目标越来越近,人民军队在新时代展现出前所未有的崭新风貌。这次阅兵全面展示了军队现代化建设的丰硕成果。 中华民族捍卫和平正义的坚定宣示面对复杂多变的国际形势,中华民族以这场阅兵向世界庄严宣示:我们热爱和平,但绝不会让历史悲剧重演;我们追求发展,但始终坚持走和平发展道路。 激动人心的检阅时刻庄严的检阅仪式上午9时19分许,雄壮的军乐声响彻长安街。习近平主席乘坐红旗检阅车,沿着庄严的长安街向东缓缓行进,依次检阅地面徒步...
贪心算法1:区间调度问题
引言贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法策略。它的核心思想是在求解过程中,始终做出当前看来最好的选择,希望通过局部最优选择达到全局最优的结果。 区间调度问题是学习贪心算法的经典入门题型,它能够很好地展示贪心算法的精髓和应用场景。 问题描述问题定义:给定若干个区间,选择尽可能多的区间,使得这些区间互不重叠。 例如: 区间集合:[[1,3], [2,6], [8,10], [15,18]] 最优解:选择 [1,3], [8,10], [15,18],共3个区间 贪心策略分析对于区间调度问题,我们可能会考虑以下几种贪心策略: 策略1:选择起始时间最早的区间反例:[[1,100], [2,3], [4,5]] 贪心选择:[1,100] 最优解:[2,3], [4,5] 结论:此策略不可行 策略2:选择持续时间最短的区间反例:[[1,2], [2,100], [3,4]] 贪心选择:[1,2], [3,4] 但如果有 [[1,2], [1.5,2.5], [2,3]],最短区间策略可能不是最优 策略3:选择结束时间最早的区间 ✓...
动态规划10:通配符匹配问题
前言在动态规划系列的前九篇文章中,我们分别学习了爬楼梯问题、最长公共子序列、01背包问题、最长递增子序列、不同路径问题、股票买卖问题、编辑距离问题、回文子串问题和区间DP问题。 今天我们将探讨动态规划中另一个经典的字符串匹配问题——通配符匹配问题。这个问题在文件系统、正则表达式、数据库查询等领域都有广泛应用,是理解模式匹配算法的重要基础。 问题描述通配符匹配问题的核心是判断一个字符串是否能匹配一个包含通配符的模式。 基本规则 '?' 匹配任何单个字符 '*' 匹配任意数量的字符(包括零个) 其他字符必须精确匹配 问题定义给定一个字符串 s 和一个字符模式 p,实现一个支持 '?' 和 '*' 匹配的通配符匹配。 示例: 123456输入: s = "adceb", p = "*a*b*"输出: true解释: 第一个 '*' 匹配空字符串, 第二个 '*' 匹配 "dce".输入: s = "acdcb&q...
动态规划9:区间DP问题
动态规划系列第九篇:区间DP问题深度解析 本文是动态规划系列的第九篇文章,将深入探讨区间动态规划这一重要分支。区间DP是动态规划的一个经典类型,主要解决在一个区间内进行合并、分割等操作的最优化问题。 前言回顾在前面的文章中,我们已经学习了动态规划的基础概念、经典问题以及各种优化技巧。今天我们将进入一个新的领域——区间动态规划(Interval Dynamic Programming),这是动态规划中一个非常重要且有趣的分支。 什么是区间DP?区间动态规划,简称区间DP,是一种在区间上进行动态规划的方法。它的核心思想是:对于一个区间,我们可以通过划分子区间,然后合并子区间的结果来得到整个区间的最优解。 区间DP的特点 状态定义:通常用 dp[i][j] 表示区间 [i, j] 的最优值 状态转移:通过枚举分割点 k,将区间 [i, j] 分解为 [i, k] 和 [k+1, j] 边界条件:通常是单个元素或空区间的情况 填表顺序:按区间长度从小到大填充 区间DP的一般框架123456789101112131415161718192021222324252627// 区间DP的通...
动态规划8:回文子串问题
引言在动态规划系列的前七篇文章中,我们分别学习了爬楼梯问题、最长公共子序列、01背包问题、最长递增子序列、不同路径问题、股票买卖问题和编辑距离问题。 今天我们将探讨动态规划中又一个经典的字符串问题——回文子串问题。回文字符串具有独特的对称性质,在文本处理、密码学、生物信息学等领域都有重要应用。通过学习这个问题,我们将掌握多种不同的算法思想和优化技巧。 问题定义什么是回文字符串?回文字符串:正读和反读都相同的字符串。 例如: 单个字符:"a"、"b"(都是回文) 对称字符串:"aba"、"abcba" 偶数长度:"abba"、"aa" 经典例题我们将围绕以下几个经典问题展开讨论: LeetCode 5. 最长回文子串 LeetCode 647. 回文子串 LeetCode 516. 最长回文子序列 问题一:最长回文子串问题描述给你一个字符串 s,找到 s 中最长的回文子串。 12345678示例 1:输入:s = "babad"输出...
动态规划7:编辑距离问题
引言在动态规划系列的前六篇文章中,我们分别学习了爬楼梯问题、最长公共子序列、01背包问题、最长递增子序列、不同路径问题和股票买卖问题。今天我们将探讨动态规划中另一个重要且实用的问题——编辑距离问题。 编辑距离(Edit Distance),也称为Levenshtein距离,是衡量两个字符串相似度的重要指标。它在文本处理、DNA序列分析、拼写检查、机器翻译等领域有着广泛的应用。通过学习这个问题,我们将深入理解动态规划在字符串处理中的强大能力。 问题定义什么是编辑距离?编辑距离:将一个字符串转换为另一个字符串所需的最少编辑操作次数。 允许的编辑操作包括: 插入(Insert):在字符串中插入一个字符 删除(Delete):从字符串中删除一个字符 替换(Replace):将字符串中的一个字符替换为另一个字符 经典例题LeetCode 72. 编辑距离 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数。 1234567891011121314151617示例 1:输入:word1 = "horse", ...
动态规划6:股票买卖问题
引言在动态规划系列的前五篇文章中,我们分别学习了爬楼梯问题、最长公共子序列、01背包问题、最长递增子序列和不同路径问题。今天我们将探讨动态规划中极具实用价值的一类问题——股票买卖问题。 股票买卖问题是动态规划中的经典应用,它不仅在算法面试中频繁出现,更与实际的投资决策密切相关。通过学习这类问题,我们将深入理解状态机动态规划的设计思想和实现技巧。 问题背景股票买卖问题的核心在于:在给定的股票价格序列中,通过买入和卖出操作获得最大利润。 这类问题通常具有以下特征: 时间序列:股票价格按时间顺序给出 操作限制:买入卖出有各种限制条件 状态转换:持有股票和不持有股票是两种不同的状态 最优化目标:追求最大利润 问题分类与解法股票买卖问题根据交易限制可以分为几大类,我们将逐一分析: 类型一:买卖股票的最佳时机(只能交易一次)LeetCode 121. 买卖股票的最佳时机 问题描述给定一个数组 prices,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的某一天卖出该股票。设计一个算法来计算你所能获取的最大利润。 1...
动态规划5:不同路径问题与路径计数
引言在动态规划系列的前四篇文章中,我们分别学习了爬楼梯问题、最长公共子序列、01背包问题和最长递增子序列。今天我们将探讨动态规划的另一个重要分支——路径计数问题。 路径计数问题是动态规划中非常重要的一类问题,它不仅在算法面试中频繁出现,还与组合数学紧密相关。通过学习这类问题,我们能够深入理解动态规划在计数问题中的应用。 问题背景路径计数问题的核心思想是:在一个给定的空间中,计算从起点到终点的不同路径数量。这类问题通常具有以下特征: 方向限制:只能向特定方向移动(如向右、向下) 路径唯一性:每条路径由一系列移动步骤组成 计数目标:求所有可能路径的数量 经典例题一:不同路径问题描述LeetCode 62. 不同路径 一个机器人位于一个 m x n 网格的左上角。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径? 1234567891011示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2....
动态规划4:最长递增子序列问题
引言在动态规划系列的前三篇文章中,我们分别学习了爬楼梯问题、最长公共子序列和01背包问题。今天我们将探讨另一个动态规划的经典问题——最长递增子序列(Longest Increasing Subsequence,LIS)。 最长递增子序列问题不仅是动态规划的核心问题之一,更是算法优化思想的绝佳体现。从朴素的O(n²)动态规划解法,到巧妙的O(nlogn)优化算法,这个问题展现了算法设计的精妙之处。 问题定义什么是递增子序列?递增子序列:从原数组中按照原有顺序选取若干元素,使得这些元素严格递增。 注意几个关键点: 保持原有顺序:不能改变元素在原数组中的相对位置 严格递增:后面的元素必须大于前面的元素 不要求连续:子序列的元素在原数组中可以不相邻 最长递增子序列问题给定一个整数数组,找到其中最长递增子序列的长度。 经典例题:LeetCode 300. 最长递增子序列 1234567891011121314示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,18],因此长度为 4。示例 2:输入:nums = [0...
动态规划3:01背包问题
引言在前面的文章中,我们学习了动态规划入门和最长公共子序列问题。今天我们将探讨动态规划中最为经典和重要的问题之一——01背包问题。 01背包问题是动态规划的核心问题,它不仅在算法面试中频繁出现,更是理解动态规划思想的绝佳案例。掌握了01背包,你就掌握了一把解决众多动态规划问题的钥匙。 问题描述01背包的基本定义有一个容量为 W 的背包和 n 个物品,每个物品有两个属性: 重量 weight[i]:第 i 个物品的重量 价值 value[i]:第 i 个物品的价值 目标:在不超过背包容量的前提下,选择若干物品装入背包,使得背包中物品的总价值最大。 约束条件: 每个物品只能选择一次(0 或 1),这就是 “01” 的含义 所选物品的总重量不能超过背包容量 经典例题例题:LeetCode 416. 分割等和子集 给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 123456789示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11]。示例 2:输入:...


