算法学习(七)枚举

枚举

1. 概念

枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是:枚举所有的可能。
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
(1)可预先确定候选答案的数量;
(2)候选答案的范围在求解之前必须有一个确定的集合

在实际问题中, 有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月, 一个班每周有六门课程等等。
枚举算法的优点

枚举算法一般是现实生活问题的“直译”,所以比较直观,易于理解
枚举算法建立在考察大量状态、甚至是穷举所有状态的基础上,所有算法的真确性容易证明

枚举算法的缺点

枚举算法的效率取决与枚举状态的数量和单个状态枚举的代价,所以枚举效率比较低

2. 解题技巧(我的总结)

1> 数组中每个元素做若干种可能的操作,直接枚举, 2的m次方种可能

题目说明实现
1049. 最后一块石头的重量 II每块石头的重量在前面所有可能重量的基础上要么被加上要么被减去,枚举所有可能2^len(stones)种可能我的提交

2> 数组中选择任意个元素,2的m次方中可能,通过 排序,二分查找 优化算法

题目说明实现
1774. 最接近目标价格的甜点成本每个配料最多2份 等价于 重复两次:在配料表中任取若干份我的提交

3> 分类讨论

题目说明实现
794. 有效的井字游戏XO不能同时win,Xwin,Owin,都没Win,四种情况我的提交

4> 构造题,找到合适的方法、排列、枚举顺序一步一步构造

题目说明实现
667. 优美的排列 II1,2,3… n,n-1,n-2,… 这两类依次交错排列能得到最多的k,根据k的大小选择交错多少步我的提交

5> 利用(对称、奇偶、字母等)性质优化枚举次数

题目说明实现
1492. n 的第 k 个因子只需枚举前半部分我的提交
1930. 长度为 3 的不同回文子序列枚举所有字母我的提交

3. 更多练习

4. 参考

  1. 大部分参考自:算法基础——枚举
  2. 总库:tryHard
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值