Algorithm 一道算法题
这周的算法题是 Closest Prime Numbers in Range
,一开始的想法是说从前开后遍历,然后判断是否是质数,如果是质数就记录下来,然后在下一个质数出现的时候,判断是否是最小的,如果是最小的就更新结果。
一开始我判断质数的方法就是从2开始到这个数的一半,假如都没法整除,那么就是质数,但是这样的话,会超时,所以我就想到了一个优化的方法,就是从2开始到这个数的平方根,假如都没法整除,那么就是质数,这样的话,就不会超时了。
但是感觉用时还是比较长,所以我看了别的大佬的解法。一个优化是说,假如gap小于3,那么就不用再判断了,因为不可能更小了。只加了一行代码,但是效果很明显。
还有一个可以做的优化是,把质数的判断放到一个数组里面,这样的话,就不用每次都判断了,但是这样的话,空间复杂度就会变高。
class Solution {
public int[] closestPrimes(int left, int right) {
int pre = 0, min = Integer.MAX_VALUE;
int[] res = new int[]{-1, -1};
for (int i = left; i <= right; i++) {
if (isPrime(i)) {
if (pre != 0 && min > i - pre) {
res = new int[]{pre, i};
min = i - pre;
if (min < 3) break;
}
pre = i;
}
}
return res;
}
private boolean isPrime(int value) {
if (value < 2) return false;
for (int i = 2; i < (int)Math.sqrt(value) + 1; i++) {
if (value % i == 0)
return false;
}
return true;
}
}
Review 一篇英文文章
因为最近工作涉及到前端工作比较多,然后前端build比较慢,所以就看了一篇关于build performance的文章 Keep webpack Fast: A Field Guide for Better Build Performance。看完了但是还没有具体实践,之后要做的第一步就是看看怎么来measure build过程中的各个过程的一个时间。
Technique/Tips 一个技术点
在你负责上线某个feature的过程中,你需要做的事情包括以下几方面:
- 提前通知其他相关团队你要在这段时间进行上线,包括开发团队,支持团队等
- 组织好相关的测试工作,邀请不同的人参加bug bash,在上线前尽量发现问题
- 提前准备好相关的文档,不管是测试相关的文档还是上线文档
- 上线过程中在各个环境进行验证,上线完成后再次进行通知
- 上线之后需要检测相关feature的一些状态来进行衡量
Share 一个观点
假如想在工作中获得更大的成就,不仅说需要关注于上级给你分配的任务。也可以更多的去想想,你的上级或者你所开发的产品有什么痛点需要解决。然后在日常工作之外,去做一些相关的工作。比如关于performance,reliability,revenue这些。