leetcode 204. Count Primes 这道题很有趣 + 搜索空间递减

来源:互联网 发布:鱼鹰软件 编辑:程序博客网 时间:2024/06/11 16:40

Description:

Count the number of prime numbers less than a non-negative number, n.

这道题就是考察小于n的所有的质数的数量,直接遍历肯定超时,所以使用布尔数组来筛掉不符合条件的数字,该数字就不再进入下一层循环进行判断了。

代码如下:

import java.util.Arrays;public class Solution {    //http://blog.csdn.net/criminalcode/article/details/68954073    public int countPrimes(int n)     {        boolean[] vis= new boolean[n];        Arrays.fill(vis,false);        int cnt=0;        for(int i=2;i<n;i++)        {            if(vis[i]==false)            {                cnt++;                for(int j=2;j*i<n;j++)                    vis[i*j]=true;                          }        }        return cnt;    }}

下面是C++的做法,使用数组做一次搜索空间递减,很棒的想法

代码如下:

#include <iostream>#include <vector>#include <string>#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <algorithm>using namespace std;class Solution{public:    int countPrimes(int n)    {        vector<bool> flag(n, false);        int count = 0;        for (int i = 2; i < n; i++)        {            if (flag[i] == false)            {                count++;                for (int j = 2; j*i < n; j++)                    flag[j*i] = true;            }        }        return count;    }};
原创粉丝点击