LeetCode 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 n,如果 n < 2 n\lt 2 n<2,则 n n n不是质数。

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

否则, n n n为质数。

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

  • 时间复杂度 O ( l e n ( n u m s ) × max ⁡ ( n u m s ) ) O(len(nums)\times\sqrt{\max(nums)}) O(len(nums)×max(nums) )
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
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
go 复制代码
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
java 复制代码
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
python 复制代码
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

相关推荐
203号居民1 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真3 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
地平线开发者4 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠5 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc
2401_862880825 小时前
数据结构 --- 栈
c语言·数据结构·算法
致Great5 小时前
Qwen3.8-27B 接入 DSH 全流程实测:写代码、跑长任务,都没问题
算法
Tisfy6 小时前
LeetCode 3471.找出最大的几近缺失整数:三种情况判断
算法·leetcode·题解·分类讨论
linux-hzh6 小时前
百日算法修炼 · Day 12
算法·深度优先
额额额对了6 小时前
数据结构:二叉树
c语言·数据结构·算法
iNeuOS工业互联网7 小时前
iNeuOS_Vision_视觉分析,增加SAM3模型对实例分割和目标检测AI自动标注图片样本功能
人工智能·算法·目标检测