题目描述
给你一个整数数组 nums
返回两个(不一定不同的)质数在 nums 中下标的最大距离。
简单解法:遍历
根据题目描述,我们可以从左到右遍历数组,找到第一个质数所在的下标 i,然后从右到左遍历数组,找到最后一个质数所在的下标 j,答案即为 j−i。
class Solution {
public int maximumPrimeDifference(int[] nums) {
// 查找第一个质数
for (int i = 0;; ++i) {
if (isPrime(nums[i])) {
// 查找第二个质数
for (int j = nums.length - 1;; --j) {
if (isPrime(nums[j])) {
return j - i;
}
}
}
}
}
// 判断质数
private boolean isPrime(int x) {
if (x < 2) {
return false;
}
for (int v = 2; v * v <= x; ++v) {
if (x % v == 0) {
return false;
}
}
return true;
}
}