十六届蓝桥杯java b组3,4题
两数之和为质数与电池分组核心知识点与解题思路我帮你把这次问的所有题目 关键疑问全部整理成问题 代码思路 核心知识点清晰分开方便你复习。一、第一题两数之和是质数你一开始超时那道你问过的内容代码超时怎么办质数筛那段看不懂Set.add()和contains()关系continue作用输入顺序影响不影响结果题目大意给两个数组 a、b问 a[i]b[j] 满足和 ≤ nm和是质数有多少个不同的和。解题思路先把所有 ≤ nm 的质数提前筛出来埃氏筛。用HashSet存质数contains()判断是 O(1)非常快。遍历所有 a[i]b[j]符合条件就放进结果集合。最后输出结果集合大小。核心知识点埃拉托斯特尼筛法快速找 1~max 之间所有质数HashSet 的作用add存数contains快速判断存在自动去重continue跳过本轮循环剩下代码你那题里可加可不加优化思路先筛质数再判断不要每次都算质数二、第二题电池分成两组异或和相等你问过的内容为什么总异或和为 0 就输出 YES样例 1 计算过程输入顺序影响吗交换律、结合律例子不用分组怎么判断题目大意把数组分成两个非空组两组异或和相等问能不能分。解题思路超级短只算总异或和等于0输出YES否则NO核心推导你说最重要的设两组异或和X、Y总异或和 total X ^ Y题目要求 X Y则 total X ^ X 0反过来total0 ⇨ 一定能分核心知识点异或性质x ^ x 0x ^ 0 x交换律、结合律→ 顺序不影响结果a ^ b b ^ a(a^b)^c a^(b^c)存在性问题不用求怎么分只用判断能不能分三、你所有疑问的统一总结1. 代码超时怎么解决少用循环嵌套质数用筛法预处理不要每次判断HashSet比循环查找快2. 筛法代码理解for (int i2;i*isum;i) for (ji; i*jsum; j) set.remove(i*j);先把所有数放进去删掉所有质数的倍数剩下就是质数3. Set 用法add(x)把 x 放进集合contains(x)看 x 在不在用来去重、快速判断4. continue跳过本轮循环后面代码你那题里可加可不加5. 异或题核心最关键两组异或和相等 ⇔ 总异或和 0不用管怎么分只看总异或和异或满足交换律、结合律顺序不影响结果如果你愿意我可以把这两道题做成超简短背诵版笔记考前看 2 分钟就能秒写代码。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416600.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!