3115.质数的最大距离

【LetMeFly】3115.质数的最大距离:质数判断

力扣题目链接:https://leetcode.cn/problems/maximum-prime-difference/

给你一个整数数组 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 中至少有一个质数。

解题方法:质数判断

如何判断一个整数是否为质数?

对于一个整数$n$,如果$n\lt 2$,则$n$不是质数。

使用变量$i$从$2$到$\sqrt{n}$遍历,若对于某个$i$有$n% i==0$,则$n$不是质数。

否则,$n$为质数。

接着遍历整数数组,使用两个变量即可确定出第一个质数和最后一个质数。二者相减即为答案。

  • 时间复杂度$O(len(nums)\times\sqrt{\max(nums)})$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
private:
inline bool isPrime(int n) {
if (n == 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public:
int maximumPrimeDifference(vector<int>& nums) {
int m = 10000000, M = -1;
for (int i = 0; i < nums.size(); i++) {
if (isPrime(nums[i])) {
m = min(m, i);
M = max(M, i);
}
}
return M - m;
}
};

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

func max(a int, b int) int {
if a > b {
return a
}
return b
}

func min(a int, b int) int {
if a < b {
return a
}
return b
}

func isPrime(n int) bool {
if n == 1 {
return false
}
for i := 2; i * i <= n; i++ {
if n % i == 0 {
return false
}
}
return true
}

func maximumPrimeDifference(nums []int) int {
M, m := -1, 10000000
for i := 0; i < len(nums); i++ {
if isPrime(nums[i]) {
M = max(M, i)
m = min(m, i)
}
}
return M - m
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
private boolean isPrime(int n) {
if (n == 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}

public int maximumPrimeDifference(int[] nums) {
int m = 10000000, M = -1;
for (int i = 0; i < nums.length; i++) {
if (isPrime(nums[i])) {
m = Math.min(m, i);
M = Math.max(M, i);
}
}
return M - m;
}
}

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from typing import List
from math import sqrt

class Solution:
def isPrime(self, n: int) -> bool:
if n == 1:
return False
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False
return True

def maximumPrimeDifference(self, nums: List[int]) -> int:
m, M = 10000000, -1
for i in range(len(nums)):
if self.isPrime(nums[i]):
m, M = min(m, i), max(M, i)
return M - m

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140121329


3115.质数的最大距离
https://blog.letmefly.xyz/2024/07/02/LeetCode 3115.质数的最大距离/
作者
Tisfy
发布于
2024年7月2日
许可协议