public class Solution { public int countPrimes(int n) { // speical case if ( n <= 2 ) { return 0; } boolean isPrime[] = new boolean[n+1]; // step 1. for ( int i =2; i < n ; i++ ) { isPrime[i] = true; } // step 2. for ( int i =2; i < Math.sqrt(n); i++ ) { if (isPrime[i]) { for ( int j = i+i; j < n; j=j+i) { isPrime[j] = false; } } } // step3 int count = 0; for ( int i =2; i < n ; i++ ) { if (isPrime[i]) { count++; } } return count; } }
Saturday, July 11, 2015
[Leetcode]07/09 [Hash]Count Primes
/*
No hashMap here @@
Time:O(n^2), Space:O(1)
Logic:
isPrime:O(n)
1-n check isPrime:O(n)*O(n)=O(n^2)
Time:O(nlog(logn)); Space:O(n)
Logic:
,Sieve of Eratosthenes
step 1. assume all number are prime number
step 2. starting from 2, take out all 2*2, 2*3, 2*4...2*X
and then take out all 3*2, 3*3, 3*4...3*X
step 3. count all isPrime number
NOTE:
i < Math.sqrt(n)
boolean isPrime[] = new boolean[n+1];
*/
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment