面试刷题第8天
LeetCode刷题——204. 计数质数
1、题目描述
给定整数n,返回所有小于非负整数n的质数的数量。
2、解题思路
插空法:
(1)首先所有的偶数均舍弃。
(2)建立布尔类型的数组,记录每个数是否可以被舍弃,若为true,结果数减1。
(3)从3开始遍历,若3的平方大于等于n,就不予考虑了。
Java代码如下:
class Solution {
public int countPrimes(int n) {
if(n < 3){
return 0;
}
boolean[] f = new boolean[n];
int count = n / 2; //所有的偶数均抛弃,还剩几个数
//跳过1、2, 3、5、7开始
for(int i=3; i*i<n; i+=2){
if(f[i]){
continue;
}
// 3*3开始 3*3 3*5 3*7依次进行
for(int j=i*i; j<n; j+=2*i){
if(!f[j]){
--count;
f[j] = true;
}
}
}
return count;
}
}