Bootstrap

209.力扣每日一题:质数的最大距离

代码解决

class Solution {
public:
    // 判断一个数是否为质数
    bool isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        if (n <= 3) {
            return true;
        }
        if (n % 2 == 0 || n % 3 == 0) {
            return false;
        }
        for (int i = 5; i * i <= n; i += 6) {
            if (n % i == 0 || n % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }

    // 计算数组中质数下标的最大距离
    int maximumPrimeDifference(vector<int>& nums) {
        vector<int> primeIndices; // 存储质数的下标
        int result = 0; // 最大距离的结果

        // 找出所有质数的下标
        for (int i = 0; i < nums.size(); i++) {
            if (isPrime(nums[i])) {
                primeIndices.push_back(i); // 将质数的下标添加到数组中
            }
        }

        // 如果质数的数量小于2,直接返回0,因为无法计算两个质数的距离
        if (primeIndices.size() < 2) {
            return result;
        }

        // 计算最大和最小质数下标之间的距离
        int maxIndex = *max_element(primeIndices.begin(), primeIndices.end());
        int minIndex = *min_element(primeIndices.begin(), primeIndices.end());
        result = maxIndex - minIndex;

        return result;
    }
};
  • isPrime 函数

    • 判断一个数是否为质数。根据质数的定义进行判断,首先排除小于等于1的数,然后检查是否可以被2和3整除,最后通过循环检查是否可以被6的倍数加减1整除。
  • maximumPrimeDifference 函数

    • 创建一个空向量 primeIndices 用于存储质数的下标。
    • 遍历输入的整数数组 nums,对每个数使用 isPrime 函数判断是否为质数,如果是,则将其下标添加到 primeIndices 中。
    • 如果 primeIndices 中质数的数量小于2,直接返回0,因为无法计算两个质数的距离。
    • 使用 max_elementmin_element 分别找到 primeIndices 中的最大和最小下标,计算它们之间的差值,并将结果存储在 result 变量中。
    • 最后返回 result
;