枚举
1. 概念
1⃣️位运算
2⃣️加法器
3⃣️模运算
1.基本性质:amod b的结果一定小于b。
2.加法性质: (a + b) mod c = (a mod c + b mod c) mod c。
3.乘法性质: (a * b) mod c = (a mod c * b mod c) mod c。
4.减法性质: (a - b) mod c = (a mod c- b mod c + c) mod c。
5.幂运算性质: a^b mod c = (a mod c)^b mod c。
4⃣️素数
2. 解题技巧(我的总结)
1> 位表示信息
题目 | 说明 | 实现 |
---|---|---|
458. 可怜的小猪 | 共k个时段内检测出结果的信息向量长度 = buckets 的 k+1进制数长度 | 我的提交 |
1558. 得到目标数组的最少函数调用次数 | 减次数 = 二进制1的个数之和,除次数 = 二进制最高位数 | 我的提交 |
1734. 解码异或后的排列 | 偶数和其加1值的异或结果为1,故题中所有数异或结果为1或0,给第一个数初值0,求出所有后续的数,再将所有数都异或真实firstVal | 我的提交 |
2> 素数查找,最小堆
①埃筛法
②多路归并
题目 | 说明 | 实现 |
---|---|---|
313. 超级丑数 | 所有丑数由已有丑数 * 素数列表诞生,从小到大多路归并 | 我的提交 |
786. 第 K 个最小的素数分数 | 所有丑数由已有丑数 * 素数列表诞生,从小到大多路归并 | 我的提交 |
1390. 四因数 | num有4个因数 等价于 num = xy 其中x是素数,且y是素数或y=xx | 我的提交 |
1447. 最简分数 | 思想(多个非最简分数都对应前面一个最简分数)x/y,从小到大每找到一个最简就将所有的ix/iy给标记 | 我的提交 |
1508. 子数组和排序后的区间和 | 多路归并递增产生区间和 | 我的提交 |
2523. 范围内最接近的两个质数 | 线性筛 更高效,数组、哈希表预分配空间降低耗时 | 我的提交 |
3> 汉明距离,每个维度的汉明距离相互独立
题目 | 说明 | 实现 |
---|---|---|
477. 汉明距离总和 | 记录数组中所有数每个汉明位上1出现的个数,则最终每个位导致的距离 = cnt1 *(m - cnt1 ) | 我的提交 |
4> 最大公约数,最小公倍数,辗转相除法
题目 | 说明 | 实现 |
---|---|---|
592. 分数加减运算 | a,b 的最小公倍数 = a * b / (a,b的最大公约数) | 我的提交 |
1806. 还原排列的最少操作步数 | a,b 的最小公倍数 = a * b / (a,b的最大公约数) | 我的提交 |
2001. 可互换矩形的组数 | 可替换的矩形,对应着唯一的最简比例,即组合计数问题,采用用容斥定理解决 | 我的提交 |
5> 几何图形问题
题目 | 说明 | 实现 |
---|---|---|
593. 有效的正方形 | 枚举可能性,不断尝试,注意边界条件 | 我的提交 |
858. 镜面反射 | 补出镜像即可 | 我的提交 |
1401. 圆和矩形是否有重叠 | 找矩形上距离圆心的最近点(根据圆心的位置) | 我的提交 |
6> 数学分析,简化问题
题目 | 说明 | 实现 |
---|---|---|
754. 到达终点数字 | 考虑sum-target能被2整除 | 我的提交 |
991. 坏了的计算器 | 考虑先*2到大于target 再由大到小减去2的k次方直至得到target | 我的提交 |
1432. 改变一个整数能得到的最大差值 | 分别从高往低是探索,考虑最大和最小,一定注意111不能缩小为100 | 我的提交 |
1503. 所有蚂蚁掉下来前的最后一刻 | 等价于交换身份,不发生碰撞 | 我的提交 |
1814. 统计一个数组中好对子的数目 | 等价于 x-rev(x) == y-rev(y) | 我的提交 |
2165. 重排数字的最小值 | 只需要统计每种数字的个数,然后贪心的填数字就行了 | 我的提交 |
7> 模运算简化问题
题目 | 说明 | 实现 |
---|---|---|
1015. 可被 K 整除的最小整数 | newVal = 10*val + 1,故只需记录上一个val的模值,即可推出当前模值,出现的值且一定是周期性的 | 我的提交 |
1497. 检查数组对是否可以被 k 整除 | 记录所有mod结果出现的次数,判断每一对是否相等 | 我的提交 |
1625. 执行操作后字典序最小的字符串 | 循环移动问题,总长度为n,增量为d时,最大增量Dmax = (i*d % n) ==0 时的i取值 | 我的提交 |
8> 二进制,模拟加法器
题目 | 说明 | 实现 |
---|---|---|
1404. 将二进制表示减到 1 的步骤数 | 从右到左模拟加法器,c表示进位,ans遇’0’加1,遇’1’加2 | 我的提交 |
9> 数学归纳法:从初始简单情况出发,递推出后面所有情况
题目 | 说明 | 实现 |
---|---|---|
1798. 你能构造出连续值的最大数目 | 贪心的从小到大排序,归纳法:初始{0}连续, 前i个的和连续 -> 前i+1和也连续,否则终止循环 | 我的提交 |
1798. 你能构造出连续值的最大数目 | 贪心的从小到大排序,归纳法:初始{0}连续, 前i个的和连续 -> 前i+1和也连续,否则终止循环 | 我的提交 |
10> 异或运算:可以任意调换顺序、任何数异或0都是本身、任何数异或本身都是0
题目 | 说明 | 实现 |
---|---|---|
2425. 所有数对的异或和 | 对方长度是偶数则最终表达式中有本数组的所有元素 | 我的提交 |
2240. 买钢笔和铅笔的方案数 | 依次选择各个item,dp[i]表示 有i数量钱时购买任意数量前k个item的方案数 | 我的提交 |
11> 分类讨论
题目 | 说明 | 实现 |
---|---|---|
2249. 统计圆内格点数目 | 按每行分类,将每个圆在所有行上的截距添加到对应列表中,最后统一处理 | 我的提交 |