一、题目
给你一个整数数组 nums
,返回两个(不一定不同的)质数在 nums
中 下标 的 最大距离。
示例 1:
输入: nums = [4,2,9,5,3]
输出: 3
解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答案是 |4 - 1| = 3。
示例 2:
输入: nums = [4,8,2,8]
输出: 0
解释: nums[2] 是质数。因为只有一个质数,所以答案是 |2 - 2| = 0。
提示:
1 <= nums.length <= 3 * 105
1 <= nums[i] <= 100
输入保证 nums 中至少有一个质数。
二、提交记录
我的提交记录
提交记录一
class Solution {
public int maximumPrimeDifference(int[] nums) {
List<Integer> indexList = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (isPrime(nums[i])) {
indexList.add(i);
}
}
return indexList.get(indexList.size() - 1) - indexList.get(0);
}
public static boolean isPrime(int number) {
if (number < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
提交记录二
class Solution {
public int maximumPrimeDifference(int[] nums) {
int left = 0;
int right = nums.length;
if (nums.length == 1) {
return 0;
}
for (int i = 0; i < nums.length; i++) {
if (isPrime(nums[i])) {
left = i;
break;
}
}
for (int i = nums.length - 1; i >= 0; i--) {
if (isPrime(nums[i])) {
right = i;
break;
}
}
return right - left;
}
public static boolean isPrime(int number) {
if (number < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}