博客断更了一段时间,现在准备重新捡起来。写博客是一个总结,分享的过程,也是提升自我表达的很好的方式。将一个问题以深入浅出的方式表达出来,让读者读的开心,容易理解,这是我们开发人员职业生涯当中很重要的一个能力。
前一阵子秋招,笔试面试了挺多公司,也积累了一点点自己的经验,想陆续分享出来,也请各位多多斧正。
第一家面试的是深圳一家游戏公司,手写算法题,求N以内的素数,当然需要一步步的去优化时间复杂度,过程就不细说了,下面说说我的理解。
1、首先是最常规的解法,判断n是不是素数,即判断n能否被[2,sqrt(n)]整除,若一个数不是素数,那么它分解的因数中一定有一个小于等于sqrt(n),另一个大于等于sqrt(n)。
static List<Integer> prime1(int n) { //n>=2
List<Integer> pri=new ArrayList<>();
pri.add(2);
for(int i=3;i<=n;i=i+2) {
int tmp=(int)Math.sqrt(i);
int j=2;
for(;j<=tmp;j++) {
if(i%j==0) break;
}
if(j>tmp) pri.add(i);
}
return pri;
}