当前位置: 首页 > article >正文

算法-查找数组对角线上最大的质数

力扣题目:2614. 对角线上的质数 - 力扣(LeetCode)

给你一个下标从 0 开始的二维整数数组 nums

返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数,返回 0 。

注意:

  • 如果某个整数大于 1 ,且不存在除 1 和自身之外的正整数因子,则认为该整数是一个质数。
  • 如果存在整数 i ,使得 nums[i][i] = val 或者 nums[i][nums.length - i - 1]= val ,则认为整数 val 位于 nums 的一条对角线上。

在上图中,一条对角线是 [1,5,9] ,而另一条对角线是 [3,5,7]

示例 1:

输入:nums = [[1,2,3],[5,6,7],[9,10,11]]
输出:11
解释:数字 1、3、6、9 和 11 是所有 "位于至少一条对角线上" 的数字。由于 11 是最大的质数,故返回 11 。

示例 2:

输入:nums = [[1,2,3],[5,17,7],[9,11,10]]
输出:17
解释:数字 1、3、9、10 和 17 是所有满足"位于至少一条对角线上"的数字。由于 17 是最大的质数,故返回 17 。

提示:

  • 1 <= nums.length <= 300
  • nums.length == numsi.length
  • 1 <= nums[i][j] <= 4*10^6

Java



class Solution {
    // 判断一个数是否为质数的函数
    boolean isPrime(int num) {
       // 小于等于1的数不是质数
        if (num <= 1) {
            return false;
        }
        // 2和3是质数
        if (num == 2 || num == 3) {
            return true;
        }
        // 排除偶数和3的倍数
        if (num % 2 == 0 || num % 3 == 0) {
            return false;
        }
        // 检查从5开始到sqrt(num)的所有奇数
        for (int i = 5; i * i <= num; i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
    public int diagonalPrime(int[][] nums) {
        int max=0;
        int numSLen=nums.length;
        //左上右下对角线
        for(int i=0;i<numSLen;i++)
        {
            if(isPrime(nums[i][i]))
            {
                if(nums[i][i]>max)
                {
                    max=nums[i][i];
                }
            }
        }
        //左下右上对角线
        for(int j= numSLen-1;j>-1;j--)
        {
            if(isPrime(nums[j][numSLen-1-j]))
            {
                if(nums[j][numSLen-1-j]>max)
                {
                    max=nums[j][numSLen-1-j];
                }
            }
        }
        return max;

    }
}

C++

class Solution {
public:
    int diagonalPrime(vector<vector<int>>& nums) {
        int maxPrime = 0;
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            if (isPrime(nums[i][i])) {
                maxPrime = max(maxPrime, nums[i][i]);
            }
            if (i != n - 1 - i && isPrime(nums[i][n - 1 - i])) {
                maxPrime = max(maxPrime, nums[i][n - 1 - i]);
            }
        }
        return maxPrime;
    }

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

Python

class Solution:
    def diagonalPrime(self, nums: List[List[int]]) -> int:
        maxPrime = 0
        n = len(nums)
        for i in range(n):
            if self.isPrime(nums[i][i]):
                maxPrime = max(maxPrime, nums[i][i])
            if i != n - 1 - i and self.isPrime(nums[i][n - 1 - i]):
                maxPrime = max(maxPrime, nums[i][n - 1 - i])
        return maxPrime

    def isPrime(self, num: int) -> bool:
        if num == 1:
            return False
        if num % 2 == 0:
            return num == 2
        i = 3
        while i * i <= num:
            if num % i == 0:
                return False
            i += 2
        return True


http://www.kler.cn/a/503532.html

相关文章:

  • 对MySQL滴MVCC理解(超详细)
  • Leetcode - 周赛431
  • Http 响应状态码 前后端联调
  • springboot
  • toRef 和 toRefs 详解及应用
  • RocketMQ 知识速览
  • 【IDEA 2024】学习笔记--文件选项卡
  • 我的年度总结
  • 高级运维:shell练习2
  • 【后端面试总结】tls中.crt和.key的关系
  • (EACL-2023)DyLoRA:使用动态无搜索低秩自适应对预训练模型进行参数高效调整
  • Springboot + vue 小区物业管理系统
  • OpenCV实现多尺度细节提升算法
  • Kafka消费者如何优雅下线
  • RTK北斗高精度定位4G执法记录仪在铁路作业安全风险管控中的应用
  • 【kubernetes】K8S节点状态的维护
  • C++并发编程之普通无锁队列与单生成者单消费者队列
  • 数据结构与算法之栈: LeetCode 151. 反转字符串中的单词 (Ts版)
  • 概率论考前一天
  • Elasticsearch面试题总结
  • Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用
  • 高级运维:源码编译安装httpd 2.4,提供系统服务管理脚本并测试
  • 【华为OD-E卷 - 猜数字 100分(python、java、c++、js、c)】
  • 代码随想录算法训练营第十二天|第18题. 四数之和
  • golang之数据库操作
  • ctf竞赛