算法学习(十)数学

本文详细介绍了位运算、加法器、模运算的基本性质,以及如何运用这些概念解决涉及素数查找、分数计算、几何图形分析、数学分析和二进制操作等问题的算法题目。文章还涵盖了数学归纳法和异或运算的运用,以及分类讨论在解决问题中的策略。
摘要由CSDN通过智能技术生成

枚举

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. 统计圆内格点数目按每行分类,将每个圆在所有行上的截距添加到对应列表中,最后统一处理我的提交

3. 更多练习

4. 参考

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值