枚举与尺取法

枚举

枚举的思想:将问题的所有可能的答案一一列举

枚举算法的一般步骤:

  1. 确定范围和枚举方式: 根据题目确定枚举的范围,并选择合适的枚举方式。确保不遗漏任何真正的解,同时避免重复。

  2. 优化解空间: 查看是否存在优化的可能性,以缩小可能成为解的答案范围,提高解决问题的效率。

  3. 定义准确验证条件: 根据问题找到准确、易编码的验证条件,用于检验每个可能的解。

  4. 枚举和判断: 逐一枚举解并验证是否符合事先确定的条件,保留符合条件的解。

  5. 输出结果: 按照要求输出枚举过程中留下的符合条件的解。

枚举法包含多种技巧和方法,本节课将深入探讨其中几种方法。

组合型枚举

组合型枚举是在 n 个元素中随机选出 m 个元素的问题。对于每一种可能的选择方案,我们需要确定选择了哪 m 个元素,这就是组合型枚举。

具体而言,组合型枚举解决的是 Cnm​ 问题,即从 n 个元素中选择 m 个元素的组合数量。

排列型枚举

全排列,可以采用permutations排列函数 

尺取

尺取法(双指针法、two pointers)是一种常用的优化技巧,特别适用于解决序列的区间问题。它的操作简单,易于编程,是一种线性高效的算法。

尺取法的核心思想是维护一个区间(L,R),其中 L 为起点,R 为终点,该区间是序列内以 L 为起点的最短合法区间。关键在于 R 随着 L 的增大而增大。通过不断枚举 L,同时求解相应的 R,可以高效地解决问题。

具体的实现步骤是,不断移动 L 指针,同时更新 R 指针,直到 R 随着 L 的增大而增大。因为 R 随着 L 的增大而增大,所以总的时间复杂度为 O(n)。

通过维护两个指针,即左指针 l 和右指针 r。通过不断确定区间的左端点,让右指针 r 不断向右移动,直到满足条件停下,然后维护答案。这个过程重复进行,直到左指针 l 超过右指针 r 或满足其他特定情况(根据题目而定)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值