力扣周赛W326
第四题:
预处理+枚举
一个很新的求素数的方式:
/**
* @author 我见青山多妩媚
* @date Create on 2023/1/1 12:20
*/
public class Main04 {
//将不是素数的筛选出来
static boolean[] flag = new boolean[1000001];
static {
for(int i = 2;i<1000001;i++){
//如果遍历到i的倍数,说明不行,继续往下
if(flag[i]) continue;
//将倍数全部设为true
for(int j = i+i;j<1000001;j+=i){
flag[j] = true;
}
}
}
public int[] closestPrimes(int left, int right) {
List<Integer> list = new ArrayList<>();
int index = 0;
int subtract = Integer.MAX_VALUE;
for(int i = left;i<=right;i++){
if(!flag[i] && i > 1){
list.add(i);
int min = subtractNums(list);
if(subtract > min){
subtract = min;
index = list.size()-1;
}
}
}
return list.size() <= 1 ?new int[]{-1,-1} : new int[]{list.get(index-1),list.get(index)};
}
int subtractNums(List<Integer> list){
if(list.size() <=1) return Integer.MAX_VALUE;
return list.get(list.size()-1) - list.get(list.size()-2);
}
}
over!