三、枚举算法
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、边差分