leetcode面试准备: CountPrimes
1 题目
Description:
Count the number of prime numbers less than a non-negative number, n.
接口:public int countPrimes(int n);
2 思路
统计小于n的素数个数,注意不包括n。
思路1:素数的判断
很容易想到素数的判断isPrime
,然后逐个数来进行判断是否是素数。进行统计,输出结果。
复杂度: 把isPrime
时间复杂度控制在O(n^0.5)
的话,因此:Time:O(n^1.5) , Space:O(1)。
提交代码仍然超时。
思路2: 素数表
素数表的产生,在[1 to n)
的范围内,标记出 非素数,剩下的就是素数了。
思路:
- 初始化所有的
[2,n)
都是素数
- 剔除掉
非素数
- 统计
素数
个数
如何标记 非素数呢?分组标记:
- 2,[4,6,8,10,12,14,16,18,20,22,24...];
- 3,[9,12,15,18,21,24,27,...];
- 5,[25,30,35...]
- 考虑一下终止条件
复杂度: Time: O(n log log n) , Space: O(n)
3 代码
思路1
// 判断一个数是否是素数的方法:不是最好,但还可以。素数表是判断素数的好方法。
// Time:O(sqrt(n)) Space:O(1)
boolean isPrime(int n) {
for (int i = 2; (i * i) <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
/**
* Solution 1: 逐个判断是否是素数,思路简单。但是超时
* Time:O(n^1.5) Space:O(1)
*/
public int countPrimes(int n) {
int count = 0;
for (int i = 2; i <= n; i++) {
if(isPrime(i)) count++;
}
return count;
}
思路2
// Time: O(n log log n) Space: O(n)
public int countPrimes(int n) {
// 初始化所有的都是素数,在剔除掉 `非素数`
boolean[] isPrime = new boolean[n];
for (int i = 2; i < n; i++) {
isPrime[i] = true;
}
// 剔除非素数
for (int i = 2; (i * i) < n; i++){
if (isPrime[i]) {
for (int j = i * i; j < n; j += i) {
isPrime[j] = false;
}
}
}
// 统计素数个数
int count = 0;
for (boolean is : isPrime) {
if (is) count++;
}
return count;
}
4 总结
素数是比较经典的题目。此题的tag: HashTable, Math
5 参考
leetcode面试准备: CountPrimes的更多相关文章
- leetcode面试准备: Maximal Rectangle
leetcode面试准备: Maximal Rectangle 1 题目 Given a 2D binary matrix filled with 0's and 1's, find the larg ...
- leetcode面试准备: Game of Life
leetcode面试准备: Game of Life 1 题目 According to the Wikipedia's article: "The Game of Life, also k ...
- leetcode面试准备: Word Pattern
leetcode面试准备: Word Pattern 1 题目 Given a pattern and a string str, find if str follows the same patte ...
- leetcode面试准备:Add and Search Word - Data structure design
leetcode面试准备:Add and Search Word - Data structure design 1 题目 Design a data structure that supports ...
- leetcode面试准备:Reverse Words in a String
leetcode面试准备:Reverse Words in a String 1 题目 Given an input string, reverse the string word by word. ...
- leetcode面试准备:Implement Trie (Prefix Tree)
leetcode面试准备:Implement Trie (Prefix Tree) 1 题目 Implement a trie withinsert, search, and startsWith m ...
- leetcode面试准备:Triangle
leetcode面试准备:Triangle 1 题目 Given a triangle, find the minimum path sum from top to bottom. Each step ...
- leetcode面试准备:Sliding Window Maximum
leetcode面试准备:Sliding Window Maximum 1 题目 Given an array nums, there is a sliding window of size k wh ...
- leetcode面试准备:Simplify Path
leetcode面试准备:Simplify Path 1 题目 Given an absolute path for a file (Unix-style), simplify it. For exa ...
随机推荐
- js 取到相同的字符串 返回对应的下标
["aaa","aaa","","ddd","eee","eee"," ...
- 万网免费主机wordpress快速建站教程-万网主机申请
很多小伙伴在万网的免费主机申请活动中建立起了自己的个人网站,但还是还有许多小伙伴现在想建站,却发现官网找不到免费主机的申请地址了,以为活动结束了?其实还是可以继续申请免费主机的,接下来小编给大家介绍如 ...
- java 乱码问题-Dfile.encoding=UTF-8
http://blog.csdn.net/telnetor/article/details/5555361 问题描述:程序涉及到国际化问题,httpclient抓回来的数据乱七八糟的乱码,在转了几次编 ...
- javaScript笔记1
一.通过 id 访问HTML元素,可以使用 document.getElementById(id) 方法. 例子: <body> <button id="mybtn&quo ...
- javascript 内置对象 第17节
<html> <head> <title>内置对象</title> </head> <body> <div>内置对象 ...
- python-MySQLdb-练习
看完视频,自己练习一遍. 还是遇到问题,不过最终还是解决了.贴上完成的代码. CREATE TABLE `NewTable` ( `acctid` int(11) NOT NULL AUTO_INCR ...
- 国庆第三天2014年10月3日10:21:39,Nutz,WebCollector,jsoup
(1)做得好,做得快,只能选择一样. (2)时间过得很快,你没法在假期的一天里完成更多的计划.假期全部由自己支配,相对长一点的睡眠,新加入的娱乐(视频或者游戏),你不比在工作中更有效率. (3)每天练 ...
- 输出图像到文件 imwrite()[OpenCV 笔记7]
bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector& ...
- SGU 281.Championship
题意: 有n(n≤50000)支队伍参加了两场比赛,分别有两个排名.现在要求输出总排名,如果对任意m,在两个排名的前m个队伍都相同,那么在总排名前m个队伍就是这些队伍.其它情况按字典序排. Solut ...
- Iptables網路連線限制及攻擊防護和相關設定
[筆記整理]Iptables網路連線限制及攻擊防護和相關設定 1. 限制每個IP連接HTTP最大併發50個連接數 iptables -A INPUT -p tcp --dport 80 -m conn ...