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

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;iif(vis[i]==false)
            {
                cnt++;
                for(int j=2;j*itrue;              
            }
        }
        return cnt;
    }
}

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

代码如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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;
    }
};

你可能感兴趣的:(leetcode,For,Java,需要好好想一下的题目,leetcode,For,C++)