3115. 质数的最大距离
思路:找到两边最外侧的两个质数,返回它们的下标之差即可
方法一:判断数组nums的每个元素是否为质数,时间复杂度0(n^sqrt(n))
class Solution {
public:
bool check(int u){
if(u<2) return false;
bool flag=1;
for(int i=2;i<=u/i;i++){
if(u%i==0){
flag=0;
break;
}
}
return flag;
}
int maximumPrimeDifference(vector<int>& nums) {
int n=nums.size();
int i=0;
for(;i<n;i++){
if(check(nums[i])){
break;
}
}
int j=n-1;
while(j>=0){
if(check(nums[j])){
break;
}
j--;
}
return j-i;
}
};
方法二:nums[i]<=100,可以用质数线性筛法先预处理出所有质数。时间复杂度0(n+100)
(线性筛法0(n))acwing 868. 筛质数
class Solution {
public:
int maximumPrimeDifference(vector<int>& nums) {
vector<bool> sta(101,0);
sta[1]=1;
vector<int> primes;
for(int i=2;i<=100;i++){
if(!sta[i]){
primes.push_back(i);
}
for(int j=0;j<primes.size()&&primes[j]<=100/i;j++){
int tmp=primes[j]*i;
sta[tmp]=1;
if(i%primes[j]==0) break;
}
}
int i=0,j=nums.size()-1;
while(sta[nums[i]]){
i++;
}
while(sta[nums[j]]){
j--;
}
//cout<<j<<" "<<i<<endl;
return j-i;
}
};