摘要: 问题:找出所有小于 n 的素数。 题目很简洁,但是算法实现的优化层次有很多层。其中最主要思想的是采用 Sieve of Eratosthenes 算法来解答。 大思路为: 找出 n 范围内所有合数,并做标记。 未做标记的即为素数,统计未做标记的数个数即为原题目解。 如何找到 n 范围内所有合数? 将第一个素数 2 赋值给 i。 当 i 小于 n 时:(2) 对于以确定的素数 i ,将 i 的全部倍数标记为合数。(1) 离 i 最近的下一个未被标记为合数的数即为素数。将下一个素数赋值给 i . 上面算法有可以优化的地方: (1)步骤找合数,无需从 2 开始算 i 的倍数,而是从 i 倍开始算,即 i*i。举个例子,当 i 为 5 时, 5*2, 5*3, 5*4 的记号,已经在 i 分别为 2,3,4的时候做了。所以,可以直接从 i 倍开始算。相应地,(2)步骤也可以优化 “为 i*i n 时”。 阅读全文
posted @ 2016-01-17 22:54 TonyYPZhang 阅读(1170) 评论(0) 推荐(1) 编辑
摘要: 问题:给定一个数组和整数 k ,判断是否存在两个相等元素,并且两个相等元素的下标差在 k 以内? 问题问是否存在一个子数组满足某种条件,首先想到的是滑动窗口(sliding window)的模型 阅读全文
posted @ 2016-01-17 19:10 TonyYPZhang 阅读(353) 评论(0) 推荐(0) 编辑