0
点赞
收藏
分享

微信扫一扫

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


举报

相关推荐

0 条评论