4.4k 4 分钟

# 二叉树的概念和建立 二叉树是数据结构中的一种,它是特殊形式的树状数据结构。在二叉树中,每个节点最多有两个子节点:通常称为左子节点和右子节点。二叉树的概念和建立是计算机科学中非常基础且重要的内容,广泛应用于各种算法和数据处理场景中。 #...
8.1k 7 分钟

# 数组 C++ 中的 vector 是一个非常重要且广泛使用的容器类,它是标准模板库(STL)的一部分。 vector 可以被理解为一个动态数组,其大小可以在运行时动态改变,提供了比普通数组更灵活的操作方式。 # 基本概念 动态数组:与传统的数组不同, vector 可以根据需要动态地增加或减少元素,自动管理内存。 模板类: vector 是一个模板类,可以存储任意类型的元素,例如 vector<int> , vector<string> 等。 # 主要特性 自动管理内存: vector...
5.5k 5 分钟

# 二分查找 二分查找(Binary Search),也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。其思想非常简单:每次将待查找区间缩小一半,直到找到目标元素或者区间为空为止。 具体来说,假设我们要在升序数组 arr 中查找目标元素 target 。我们可以设置两个指针 left 和 right 分别指向数组的左右两端,然后每次取中间位置 mid = (left + right) / 2 的元素进行比较。如果 arr[mid] == target ,则直接返回 mid ;如果 arr[mid] < target ,说明目标元素在右半部分,我们将 left 更新为...
7.3k 7 分钟

# 贪心与证明 ​ 贪心算法不是对所有问题都能得到整体最优解, 关键是贪心策略的选择, 选择的贪心策略必须具备无后效性, 即某个状态以前的过程不会影响以后的状态, 只与当前状态有关。首先需要证明贪心策略是正确的, 才可以考虑使用贪心算法解决该问题。在很多情况下, 贪心的合理性并不是显然的, 但如果能找到一个反例, 就可以证明这样的贪心不正确。 # 题目:部分背包 阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N*(N≤100) 堆金币,第 i 堆金币的总重量和总价值分别是 mi*,vi(1≤mi*,vi≤100)。阿里巴巴有一个承重量为 T(T≤1000)...
1.7k 2 分钟

# 递推思想 递推思想是一种通过已知的初始条件和递推关系来逐步推导出问题的解的算法思想。 解题步骤: 定义初始条件:确定最简单的情况,即问题规模最小的情况下的解答。 确定递推关系:找出问题规模与规模更小的子问题之间的关系,其中子问题的解是已知的。 # 题目:数楼梯 假设有 n 级楼梯,每次可以走 1 级或 2 级台阶,请问走完这 n 级楼梯共有多少种不同的走法? # 分析: 当 n=1 时,只有 1 级台阶,即只有一种走法。 当 n=2 时,有两种走法:一次走 1 级台阶,一次走 2 级台阶。 当 n>2 时,走完这 n 级楼梯的走法数量等于走完前 n-1...
2.8k 3 分钟

暴力枚举是一种简单直接的问题解决方法,它通过穷举所有可能的情况来求解问题。具体来说,暴力枚举会尝试遍历问题的所有可能解,然后对每个解进行验证或者比较,找到满足特定条件的解。 暴力枚举的基本思路是通过嵌套循环来遍历所有可能的情况。对于每一层循环,我们选择一个合适的范围来考虑当前情况下的所有可能取值。通过嵌套多个循环,我们可以穷举所有可能的组合。 # 循环枚举 循环枚举是一种基于循环的暴力枚举方法。它和普通的暴力枚举相似,都是通过遍历所有可能的情况来求解问题。不同之处在于,循环枚举通常使用循环来生成可能的情况,而不是嵌套多个循环来穷举所有情况。 # 题目:统计方形 有一个 n×m...
3.4k 3 分钟

# 计数排序 计数排序是一种线性时间复杂度的排序算法,适用于一定范围内的整数排序。它的基本思想是通过统计每个元素出现的次数,然后根据这些统计信息将元素排列起来。 # 题目: 学校正在选举学生会成员,有 n(≤999n≤999)名候选人,每名候选人编号分别从 11 到 n*,现在收集到了 m*(≤2000000m≤2000000)张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序 # 分析 将选手的选票数保存在以选手号为下标的数组里,对应的值就是选票 注意:题目是按照票数字数由小到大排序 # 代码 // 计数排序#include...
5.7k 5 分钟

# 模拟 在算法竞赛中,"模拟" 是指通过编写程序来模拟现实中的某个过程或问题。通常情况下,参赛者需要根据题目要求,利用编程语言实现一个模拟器,然后使用这个模拟器来模拟特定的场景或操作。 模拟题目可以涉及各种不同的领域和问题,如模拟物理系统、模拟游戏规则、模拟网络通信等。具体而言,参赛者需要根据题目描述和输入数据,在程序中模拟所需的场景和操作,并输出符合题目要求的结果。 下面举例几道题自己体会 # 题目:乒乓球 华华和朋友打乒乓球, 得到了每一球的输赢记录: w 表示华华得一分, L 表示对手得一分, E 表示比赛信息结束。一局比赛刚开始时比分为 0 : 0...