摘要: 素数筛法的关键就在一个“筛”字。算法从小到大枚举所有数,对每一个素数,筛去它的所有倍数,剩下的就都是素数了。 例如:求1-15中的所有素数。 1、 2是素数(唯一需要事先确定的),因此筛去2的所有倍数,即4、6、8、10、12、14; 2、 3没有被前面的步骤筛去,因此3是素数,筛去所有3的倍数,即 阅读全文
posted @ 2017-10-12 21:25 煮咖啡的猪! 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 有很多题目需要细心考虑过程中是否可能存在递推关系,如果能找到这样的递推关系,就能事时间复杂度下降不少。例如就这一类涉及序列的题目来说,假如序列的每一位所需要的计算的值都可以通过该位左右两侧的结果计算得到,那么就可以考虑所谓的“左右两侧的结果”是否能通过递推进行预处理来得到,这样在后面的使用汇总就可以 阅读全文
posted @ 2017-10-12 09:51 煮咖啡的猪! 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 打表是一种典型的用空间换时间的技巧,一般指将所有可能需要用到的结果事先计算出来,这样后面需要用到时就可以直接查表获得。打表常见的用法有如下几种: 1、在程序中一次性计算出所有需要用到的结果,之后的查询直接取这些结果。 这个是最常用到的用法,例如在一个需要查询大量Fibonacci数F(n)的问题中, 阅读全文
posted @ 2017-10-12 09:42 煮咖啡的猪! 阅读(4383) 评论(0) 推荐(2) 编辑
摘要: two pointers是算法编程中一种非常重要的思想,但是很少会有教材单独拿出来将,其中一个原因是它更倾向于是一种编程技巧,而长得不太像是一个是“算法”的模样。two pointers的思想十分简介,但却提供了非常高的算法效率。 以一个例子引入:给定一个递增的正整数序列和一个正整数M,求序列中的连 阅读全文
posted @ 2017-10-12 09:15 煮咖啡的猪! 阅读(2229) 评论(1) 推荐(1) 编辑
摘要: 最近上课讲到String类,课下补充StringBuffer和StringBuilder的东西。 1、首先这三个都是java中处理字符串的常用类。 2、三者在执行速度方面是 StringBuilder>StringBuffer>String的。 至于为什么String执行速度慢,是因为String是 阅读全文
posted @ 2017-10-12 08:58 煮咖啡的猪! 阅读(131) 评论(0) 推荐(0) 编辑