【矩阵】【方向】【素数】3044 出现频率最高的素数
作者推荐
动态规划的时间复杂度优化
本文涉及知识点
素数 矩阵 方向
LeetCode 3044 出现频率最高的素数
给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字:
最多有 8 条路径可以选择:东,东南,南,西南,西,西北,北,东北。
选择其中一条路径,沿着这个方向移动,并且将路径上的数字添加到正在形成的数字后面。
注意,每一步都会生成数字,例如,如果路径上的数字是 1, 9, 1,那么在这个方向上会生成三个数字:1, 19, 191 。
返回在遍历矩阵所创建的所有数字中,出现频率最高的、大于 10的
素数
;如果不存在这样的素数,则返回 -1 。如果存在多个出现频率最高的素数,那么返回其中最大的那个。
注意:移动过程中不允许改变方向。
示例 1:
输入:mat = [[1,1],[9,9],[1,1]]
输出:19
解释:
从单元格 (0,0) 出发,有 3 个可能的方向,这些方向上可以生成的大于 10 的数字有:
东方向: [11], 东南方向: [19], 南方向: [19,191] 。
从单元格 (0,1) 出发,所有可能方向上生成的大于 10 的数字有:[19,191,19,11] 。
从单元格 (1,0) 出发,所有可能方向上生成的大于 10 的数字有:[99,91,91,91,91] 。
从单元格 (1,1) 出发,所有可能方向上生成的大于 10 的数字有:[91,91,99,91,91] 。
从单元格 (2,0) 出发,所有可能方向上生成的大于 10 的数字有:[11,19,191,19] 。
从单元格 (2,1) 出发,所有可能方向上生成的大于 10 的数字有:[11,19,19,191] 。
在所有生成的数字中,出现频率最高的素数是 19 。
示例 2:
输入:mat = [[7]]
输出:-1
解释:唯一可以生成的数字是 7 。它是一个素数,但不大于 10 ,所以返回 -1 。
示例 3:
输入:mat = [[9,7,8],[4,6,5],[2,8,6]]
输出:97
解释:
从单元格 (0,0) 出发,所有可能方向上生成的大于 10 的数字有: [97,978,96,966,94,942] 。
从单元格 (0,1) 出发,所有可能方向上生成的大于 10 的数字有: [78,75,76,768,74,79] 。
从单元格 (0,2) 出发,所有可能方向上生成的大于 10 的数字有: [85,856,86,862,87,879] 。
从单元格 (1,0) 出发,所有可能方向上生成的大于 10 的数字有: [46,465,48,42,49,47] 。
从单元格 (1,1) 出发,所有可能方向上生成的大于 10 的数字有: [65,66,68,62,64,69,67,68] 。
从单元格 (1,2) 出发,所有可能方向上生成的大于 10 的数字有: [56,58,56,564,57,58] 。
从单元格 (2,0) 出发,所有可能方向上生成的大于 10 的数字有: [28,286,24,249,26,268] 。
从单元格 (2,1) 出发,所有可能方向上生成的大于 10 的数字有: [86,82,84,86,867,85] 。
从单元格 (2,2) 出发,所有可能方向上生成的大于 10 的数字有: [68,682,66,669,65,658] 。
在所有生成的数字中,出现频率最高的素数是 97 。
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 6
1 <= mat[i][j] <= 9
分析
四层循环:第一层枚举起始行,第二层循环枚举起始列,第三层循环枚举方向。第三层循环:
一,num = mat[r][c]。
二,移动d格后是否越界,如果越界退出第四层循环,否则num = num*10+mat[nr][nc]。
三,所有num 如果是大于10的质数,则mNumCount[num]++。
四,找出频率最大的素数,如果有多个,返回值最大的。
时间复杂度:O(nmmax(n,m)8)。
初始化的时候:枚举所有[2,16]的质数。
代码
核心代码
class Solution {
public:int mostFrequentPrime(vector<vector<int>>& mat) {static const auto& v = CreatePrime(1000'000);static unordered_set<int> setPrime;if (setPrime.empty()){for (auto& n : v){if (n > 10){setPrime.emplace(n);}}}int move[8][2] = { {0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1} };unordered_map<int, int> mNumCount;for (int r = 0; r < mat.size(); r++){for (int c = 0; c < mat[0].size(); c++){for (int d = 0; d < sizeof(move) / sizeof(move[0]); d++){int num = mat[r][c];for (int k = 1;; k++){const int nr = r + move[d][0] * k;const int nc = c + move[d][1] * k;if ((nr < 0) || (nr >= mat.size())){break;}if ((nc < 0) || (nc >= mat[0].size())){break;}num = num * 10 + mat[nr][nc];if (setPrime.count(num)){mNumCount[num]++;}}}}}vector<pair<int, int>> vCntNum;for (const auto& [num, cnt] : mNumCount){vCntNum.emplace_back(cnt, num);}sort(vCntNum.begin(), vCntNum.end());return vCntNum.size() ? vCntNum.rbegin()->second : -1;}
};
template<class T,class T2>
void Assert(const T& t1, const T2& t2)
{
assert(t1 == t2);
}
template
void Assert(const vector& v1, const vector& v2)
{
if (v1.size() != v2.size())
{
assert(false);
return;
}
for (int i = 0; i < v1.size(); i++)
{
Assert(v1[i], v2[i]);
}
}
int main()
{
vector<vector> mat;
{
Solution sln;
mat = { {1,1},{9,9},{1,1} };
auto res = sln.mostFrequentPrime(mat);
Assert(19, res);
}
{
Solution sln;
mat = { {7} };
auto res = sln.mostFrequentPrime(mat);
Assert(-1, res);
}
{
Solution sln;
mat = { {9,7,8} ,{4,6,5},{2,8,6} };
auto res = sln.mostFrequentPrime(mat);
Assert(97, res);
}
}

扩展阅读
视频课程
有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快
速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176
相关下载
想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653
| 我想对大家说的话 |
|---|
| 闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
| 子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
| 如果程序是一条龙,那算法就是他的是睛 |
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

相关文章:
【矩阵】【方向】【素数】3044 出现频率最高的素数
作者推荐 动态规划的时间复杂度优化 本文涉及知识点 素数 矩阵 方向 LeetCode 3044 出现频率最高的素数 给你一个大小为 m x n 、下标从 0 开始的二维矩阵 mat 。在每个单元格,你可以按以下方式生成数字: 最多有 8 条路径可以选择:东&am…...
什么是RPC?谈谈你对RPC的理解
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议。它允许一台计算机(客户端)通过网络调用另一台计算机(服务器)上的程序,并等待该程序的结果返回。RPC抽象了网络通信的…...
C语言实现哈希查找之线性探测算法
C语言中实现一个简单的哈希表,并包括线性探测和二次探测再散列处理冲突的功能: 1. 定义哈希表结构 首先,定义一个哈希表的结构,包括存储空间、哈希表的大小等。 2. 实现哈希函数 选择一个合适的哈希函数来计算键值的哈希值。 …...
js:lodash template文件模板语法和应用
文档 https://www.lodashjs.com/docs/lodash.templatehttps://lodash.com/docs/4.17.15#template 语法 <% VALUE %> 用来做不转义插值;<%- VALUE %> 用来做 HTML 转义插值;<% expression %> 用来描述 JavaScript 流程控制。 示例 …...
在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些?
在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些? 安装Docker: 首先,需要在Windows操作系统上激活WSL2功能。这是因为Docker作为一个容器工具,依赖于已存在并运行的Linux内核环境。可以通过使用winget来安装Docker。具体…...
点击输入框,获取提示信息
HTML结构代码 <body><input><p>单击输入框获取焦点。</p><span>请输入你的电话号码?</span></body> Java script代码 <script type"text/JavaScript">let pdocument.getElementsByTagName(input)[0];console.lo…...
房贷计算器微信小程序原生语言
微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…...
【C++从0到王者】第四十六站:图的深度优先与广度优先
文章目录 一、图的遍历二、广度优先遍历1.思想2.算法实现3.六度好友 三、深度优先遍历1.思想2.代码实现 四、其他问题 一、图的遍历 对于图而言,我们的遍历一般是遍历顶点,而不是边,因为边的遍历是比较简单的,就是邻接矩阵或者邻接…...
Docker技术概论(2):Docker环境的搭建
Docker技术概论(2) Docker环境的搭建 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blo…...
电脑休眠之后唤不醒
现象:午休时间电脑休眠了,醒来之后发现在密码输入界面,但鼠标键盘没反应。按重启键或电源机重新开机,结果开不了机。 原因:1、内存条脏了,导致内存条读取失败 2、休眠的时候硬盘休眠了,导致按…...
Python列表中添加删除元素不走弯路
1.append() 向列表中添加单个元素,一般用于尾部追加 list1 ["香妃", "乾隆", "贾南风", "赵飞燕", "汉武帝"]list1.append("周瑜") print(list1) # [香妃, 乾隆, 贾南风, 赵飞燕, 汉武帝, 周瑜]…...
MATLAB环境下脑电信号EEG的谱分析
脑电信号一直伴随着人类的生命,脑电波是脑神经细胞发生新陈代谢、离子交换时细胞群兴奋突触电位总和,脑电信号的节律性则和丘脑相关,含有丰富的大脑活动信息。通常我们所接触的脑电图都是头皮脑电图,在有些特殊场合还需要皮下部位…...
librtmp源码分析
阅读了librtmp的源码,简单记录下。 首先补充下AMF格式基本知识 1 AMF格式 AMF是Action Message Format(动作消息格式)的简写,它是一种二进制的数据格式。它的设计是为了把actionscript里面的数据(包括Object, Array, Boolean, Number等)序列化成二进制…...
CCDP.00.问老师问题前你首先需要做的事情
一、一定要按老师要求做好快照!!!!! 1、在关键节点处,比如做完Part1后,关机状态下做快照。 2、在做没把握的操作前先做快照(这个可以在开机状态下做快照,但推荐关机状态…...
「算法」常见位运算总结
位运算符 异或 按位异或可以实现无进位相加,所谓无进位相加,就是在不考虑进位的情况下将两个数相加(后面有道题需要用到这种操作) 异或的运算律 ①a ^ 0 a ②a ^ a 0 ③a ^ b ^ c a ^ ( b ^ c ) 有符号右移>> 将一个…...
【C++初识】语句
文章目录 1.注释 变量 常量 关键字 标识符命名规则 数据类型 sizeof关键字 数据的输入 运算符2.程序流程结构2.1选择结构2.2循环结构2.21while{循环条件}{循环语句};//满足循环条件,执行循环语句2.22do{循环语句}while{循环条件};//do....whi…...
Python线性代数傅里叶分析和动态系统模拟分析之一
要点 Python向量数值计算、可视化,线性独立性和子空间。了解欧几里德距离、余弦相似度和皮尔逊相关性应用案例:Python数值计算文档相似度时间序列和特征检测示例:Python信号处理边缘检测器, K均值示例:随机簇质心分布Python傅里叶…...
mysql插入GEOMETRY相关字段类型(point,linestring等)
一、问题 向mysql中插入point,linestring等相关空间坐标字段,出现报错: 1416 - Cannot get geometry object from data you send to the GEOMETRY field要插入的数据:...
vue3学习 【5】watch的使用
什么是watch 当我们需要根据一个数据的变化来进行一些操作的时候我们需要使用侦听器,它能够在响应式数据发生变化的时候触发提供的回调函数 基础侦听 watch 可以侦听不同的数据源。例如: ref计算属性响应式对象getter函数多个数据源组层的数据 cons…...
PyTorch深度学习快速入门
PyTorch深度学习快速入门 1.PyTorch环境配置及安装2.python编辑器的选择、安装、配置(pycharm、JupyTer安装)3.为什么torch.cuda.is_available()返回false4.python学习中两大法宝函数(也可用在pytorch)5.pycharm和jupyter…...
MedGemma X-Ray效果展示:AI识别心脏轮廓增大与主动脉钙化
MedGemma X-Ray效果展示:AI识别心脏轮廓增大与主动脉钙化 1. 引言:AI医疗影像的新突破 今天要给大家展示一个让我眼前一亮的AI医疗影像分析工具——MedGemma X-Ray。这不是普通的图像识别软件,而是一个专门针对胸部X光片的智能分析平台&…...
d2s-editor终极指南:免费开源暗黑破坏神2存档编辑器完整教程
d2s-editor终极指南:免费开源暗黑破坏神2存档编辑器完整教程 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经想要调整暗黑破坏神2角色的属性,但又不愿意花费大量时间刷装备?或者你的…...
2026奇点大会AIAgent数据分析现场压测全复盘:单日处理2.7亿行非结构化日志,失败率<0.03%的关键设计密码
第一章:2026奇点智能技术大会:AIAgent数据分析 2026奇点智能技术大会(https://ml-summit.org) 大会核心数据洞察 本届大会首次开放全量AIAgent交互日志API,覆盖127个分会场、432台边缘推理节点及89类异构数据源。分析表明,参会者…...
测试人员必看:避开这5个职业陷阱,升职加薪不是梦
在快速迭代的互联网行业中,软件测试人员肩负着保障产品质量的核心使命。然而职业道路上暗藏的陷阱,往往让测试从业者陷入发展瓶颈。本文从行业现状出发,深度剖析五大典型职业陷阱,并给出可落地的破局策略,助你实现技术…...
德希科技在线多参数水质分析仪
一、产品概述与适用场景本设备为高度集成化全自动水质监测系统,可完成多参数水质数据实时采集、传输与智能分析。设备被广泛应用于自来水厂、供水管网、小区二次供水、游泳池、农村饮用水等场景,从取水、制水到供水实现全程水质监管,让水质状…...
棉花叶子病虫害检测数据集 叶片病虫害识别图像数据集 棉花蚜虫识别 植物灰霉病与卷叶病识别
棉花计算机视觉数据集 README一、数据集核心信息项目详情类别数量及中文名称8 类(蚜虫、粘虫、细菌性枯萎病、枯萎镰刀菌、灰霉病、健康、卷叶病、叶斑病)数据数量(向下取整)5400 张图片数据集格式YOLO 格式核心应用价值1. 支撑棉…...
STM32CubeMX配置RMBG-2.0边缘计算设备
STM32CubeMX配置RMBG-2.0边缘计算设备 1. 项目背景与价值 在嵌入式设备上运行AI模型一直是行业的热点话题,特别是像背景去除这样的实用功能。RMBG-2.0作为一款开源的背景去除模型,能够在保持高精度的同时,实现对各种图像类型的前景与背景分…...
Relm与GTK+深度集成:如何利用原生GUI组件构建现代化界面
Relm与GTK深度集成:如何利用原生GUI组件构建现代化界面 【免费下载链接】relm Idiomatic, GTK-based, GUI library, inspired by Elm, written in Rust 项目地址: https://gitcode.com/gh_mirrors/re/relm Relm是一个基于Rust语言的GUI库,深受Elm…...
MiniCPM-o-4.5-nvidia-FlagOS本地化部署:Ollama模式与星图GPU方案对比
MiniCPM-o-4.5-nvidia-FlagOS本地化部署:Ollama模式与星图GPU方案对比 最近在折腾MiniCPM-o-4.5-nvidia-FlagOS这个模型,发现不少朋友在部署时有点纠结。有人想在自己笔记本上快速跑起来试试,也有人希望找个稳定、性能好的地方长期用。我花时…...
DeepSeek-R1-Distill-Llama-8B新手教程:3步完成模型调用
DeepSeek-R1-Distill-Llama-8B新手教程:3步完成模型调用 还在为复杂的AI模型部署流程而烦恼吗?DeepSeek-R1-Distill-Llama-8B作为一款轻量级但性能强大的文本生成模型,通过ollama平台实现了开箱即用的便捷体验。本文将带你从零开始ÿ…...
