统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10 输出: 4 解释: 小于 10 的质数(素数)一共有 4 个, 它们是 2, 3, 5, 7 。
方案一:暴力法
class Solution {
public int countPrimes(int n) {
int sum = 0;
for(int i=2;i<n;i++){
boolean sign = false;
for(int j=2;j<i;j++){
if(i%j==0){
sign = true;
break;
}
}
if(!sign){
sum++;
}
}
return sum;
}
}
方案二:
埃拉托斯特尼筛法 ,简称埃氏筛或爱氏筛
从2开始,将所有小于n的,某一个质数的k次倍数全部排除,最后留下来的就是素数。
比如10以下,2的两倍4,三倍6,四倍8全部不是质数排除掉。接着3的两倍6,三倍9全部排除掉。以此类推。
public int largestRectangleArea(int[] heights) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(-1);
int max = 0;
for(int i=0;i<heights.length;i++){
if(stack.peek()!=-1&&heights[stack.peek()]>heights[i]){
max = Math.max(max,heights[stack.pop()]*(i-stack.peek()-1));
}
stack.push(i);
}
while(stack.peek()!=-1){
max = Math.max(max,heights[stack.pop()]*(heights.length-stack.peek()-1));
}
return max;
}