[LeetCode] Count Primes

Description:

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

思路:一个一个判断,

时间复杂度:O(n^2)

代码:TLE

public class Solution {

    public int countPrimes(int n) {

        int cnt=0;

        while(n>0)

        {

            if(isPrime(n))

                cnt++;

            n--;

        }

        return cnt; 

    }

    public boolean isPrime(int k)

    {

        if(k==1 || k==2) return true;

        for(int i=2;i<=Math.sqrt(k);i++)

        {

            if(k%i==0)

            {

                return false;

            }

        }

        return true;

    }

}

优化:

创建一个长度为N的数组,从2开始, 把其倍数小于N的都删掉.

        boolean [] a=new boolean[n];

        for(int i=2;i*i<n;i++)

        {

            if(!a[i])

            {

                for(int j=i;j*i<n;j++)

                {

                    a[j*i]=true;

                }

            }

        }

        int cnt=0;

        for(int i=2;i<n;i++)

        {

            if(!a[i])

                cnt++;

        }

        return cnt;

 

你可能感兴趣的:(LeetCode)