[017] C++基础算法(2)

三、枚举算法

1、概念:在搜索结果的过程中,把各种可能的情况都考虑到,并对所有结果逐一判断,过滤不符合要求的,保留符合要求的,这种方法叫枚举算法。

2、局限:不是所有的问题都适合用枚举算法,前提是解的个数不多。

3、例题

① 例题1:检测年份日期是否是回文格式

数组s[ ]为每个月的天数。

② 例题2:

此处使用d+=23,是因为满足要求后,下一次至少也是隔了23天后。

另一种方式:

四、前缀和  &   差分

1、前缀和:一种预处理手段,能大大降低查询的时间复杂度。可以理解为“数列的前n项的和”。一般用于加快计算区间和的速度,更重要的应用是前缀和优化动态规划(DP)。

2、对应的还有后缀和,前缀积,后缀积:

① 前缀和:新建一个数组B,B[i]保存A数列中[0...i]的和;

② 后缀和:新建一个数组B,B[i]保存A数列中[i...n-1]的和;

③ 前缀积:新建一个数组B,B[i]保存A数列中[0...i]的积;

④ 后缀积:新建一个数组B,B[i]保存A数列中[i...n-1]的积;

3、一维数组前缀和:

4、二维数组前缀和:

5、二维数组区间和。图中第一个黄点是(x1,y1),第二个黄点是(x2,y2)。

6、例题:

解释:a[ i ] * ((i == n - 1) ? 1 : b [ i + 1]),?和:组合构成“条件运算符”,如果 i  等于 n-1 ,那么a[ i ]与1相乘,如果 i  不等于 n-1,那么a[ i ]与 b [ i + 1]相乘。

 

7、差分:相邻两个数的差,即b[ i ] = a[ i ] - a[ i -1 ]

8、差分例题:

9、一维差分

10、二维差分

11、点差分

12、边差分

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值