【矩陣】【方向】【素數】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++**實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711992.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安裝 Ubuntu 22.04.3 和 docker

文章目錄 一、安裝 Ubuntu 22.04.31. 簡介2. 下載地址3. 系統安裝4. 系統配置 二、安裝 Docker1. 安裝 docker2. 安裝 docker compose3. 配置 docker 一、安裝 Ubuntu 22.04.3 1. 簡介 Ubuntu 22.04.3 是Linux操作系統的一個版本。LTS 版本支持周期到2032年。 系統要求雙核 C…

C++的模板template

一、什么是模板 C中的模板分為類模板和函數模板&#xff0c;并不是一個實際的類或函數&#xff0c;這指的是編譯器不會自動為其生成具體的可執行代碼。只有在具體執行時&#xff0c;編譯器才幫助其實例化。 二、為什么引入模板 拿我們最常見的交換函數來舉例子&#xff0c;如果…

代碼隨想錄 二叉樹第二周

目錄 101.對稱二叉樹 100.相同的樹 572.另一棵樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度 222.完全二叉樹的節點個數 110.平衡二叉樹 257.二叉樹的所有路徑 101.對稱二叉樹 101. 對稱二叉樹 已解答 簡單 相關標簽 相關企業 給你一…

《求生之路2》服務器如何選擇合適的內存和CPU核心數,以避免丟包和延遲高?

根據求生之路2服務器的實際案例分析選擇合適的內存和CPU核心數以避免丟包和延遲高的問題&#xff0c;首先需要考慮游戲的類型和對服務器配置的具體要求。《求生之路2》作為一款多人在線射擊游戲&#xff0c;其服務器和網絡優化對于玩家體驗至關重要。 首先&#xff0c;考慮到游…

Java應用程序注冊成Linux系統服務后,關閉Java應用程序打印系統日志

Java應用程序有自己的日志框架&#xff0c;有指定位置的日志文件&#xff0c;不需要在系統日志里記錄&#xff0c;占用磁盤空間。 1.Linux系統文件目錄 /etc/systemd/system/ 找到要修改的Java應用程序服務配置 比如bis-wz-80.service 2.設置不打印日志 StandardOutputnull S…

centos7 搭建 harbor 私有倉庫

一、下載安裝 1.1、harbor 可以直接從 github 上下載&#xff1a;Releases goharbor/harbor GitHub 這里選擇 v2.10.0 的版本 wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz 1.2、解壓 tar zxvf harbor-offlin…

L2 網絡 Mint Blockchain 正式對外發布測試網

Mint Blockchain 是由 NFTScan Labs 發起的聚焦在 NFT 生態的 L2 網絡&#xff0c;致力于促進 NFT 資產協議標準的創新和 NFT 在現實商業應用場景中的大規模采用。 Mint Blockchain 于 2024 年 2 月 28 號正式對外發布測試網&#xff0c;開始全面進入生態開發者測試開發階段。 …

2403C++,C++11玩轉無棧協程

原文 C11里也能玩無棧協程了? 答案是:可以! 事實上異網在很早時,C11里就可用無棧協程寫異步代碼了,只不過用起來不太方便,來看看C11里怎么用異網無棧協程寫一個回音服務器的吧. #包含 <異網.h> #包含 <內存> #包含 <向量> #包含 <異網/產生.h> 用 …

c++異常機制(5)-- 繼承與異常

我們在c異常機制(3)中自定義類型&#xff0c;我們將相應的異常封裝成了類&#xff0c;在類中實現一些方法&#xff0c;對異常進行處理。其中每一個類都實現了print()方法。 我們使用throw拋出相應異常的虛擬對象&#xff0c;在catch參數中進行匹配&#xff0c;但是如果有很多異…

Springboot項目集成短信驗證碼(超簡單)

操作流程 注冊驗證碼平臺創建驗證碼模版開始集成&#xff08;無需引入第三方庫&#xff09; 注冊并登陸中昱維信驗證碼平臺 獲取AppID和AppKey。 創建驗證碼模版 創建驗證碼模版&#xff0c;獲取驗證碼模版id 開始集成 創建controller import org.springframework.web.bi…

MATLAB環境下基于隨機游走拉普拉斯算子的快速譜聚類方法

古人有云&#xff0c;物以類聚&#xff0c;在面臨信息爆炸問題的今天&#xff0c;對信息類別劃分的價值日益顯現&#xff0c;并逐步成為學者們的研究熱點。分類和聚類是數據挖掘的重要工具&#xff0c;是實現事物類別劃分的左右手&#xff0c;聚類又是分類一種特殊的方式。所謂…

CodeWhisperer安裝教導--一步到位!以及本人使用Whisperer的初體驗。

CodeWhisperer是亞馬遜出品的一款基于機器學習的通用代碼生成器&#xff0c;可實時提供代碼建議。類似 Cursor 和Github AWS CodeWhisperer 亞馬遜科技的CodeWhisperer是Amazon于2021年12月推出的一款代碼補全工具&#xff0c;與GitHub Copilot類似。主要的功能有:代碼補全注釋…

貓毛過敏養貓人士的必備養貓好物-寵物空氣凈化器品牌分享

許多貓奴在與貓相處一段時間后突然對貓毛過敏&#xff0c;這真是令人難受。一些人認為對貓咪過敏是因為它們在空氣中飄浮的毛發引起的&#xff0c;但實際上大部分人之所以過敏是因為對貓身上一種微小的蛋白質過敏。這種導致過敏的蛋白質附著在貓咪的一些皮屑上。我們都知道貓咪…

前端架構: 腳手架通用框架封裝之入口文件開發(教程一)

腳手架入口文件開發 創建腳手架項目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安裝 lerna, $ npm i -g lerna 基于 lerna 完成項目初始化 $ lerna init 基于 lerna 創建腳手架 cli $ lerna create cli一路回車 好現在生成了一個 cli 的模板&#xff0c;目前需要…

Qt 中Json的構造和解析簡單例子

概述: Qt中使用Json比較方便&#xff0c;不像純C需要導入CJson RapidJson JsonCpp等第三方的庫&#xff0c;主要使用到QJsonDocument、QJsonObject對象即可 1、如何構造一個json字符串 假如我們需要構造 {"cmd":"1001","data":{"content&q…

Linux 下安裝Jupyter

pip3 install jupyter pip3 install ipython -------------------------------------------- pip3 install jupyterlab jupyter lab pip3 list | grep jupyterlab 啟動&#xff1a; python3 -m jupyter lab 2.安裝朱皮特 pip3 install -i https://pypi.douban.com/simpl…

高性能的key-value數據庫Redis 介紹

Redis 是一個高性能的key-value數據庫。 Redis是一個開源的鍵值存儲系統&#xff0c;通常用于緩存和消息傳遞。它支持多種類型的數據結構&#xff0c;如字符串、列表、集合、散列表和有序集合等。Redis的特點是提供了高性能、靈活性和可伸縮性。 Redis的主要特點包括&#xff…

Pytorch學習 day02(加載數據)

加載數據 * Dataset提供一種方式&#xff1a;來獲取數據及其label&#xff0c;給數據進行編號 * Dataloader為神經網絡提供不同的數據形式 Dataset的組織形式有很多種&#xff0c;例如&#xff1a; 將label放在文件夾名上&#xff0c;如下&#xff1a; #Dateset # --train #…

Python算法題集_組合總和

Python算法題集_組合總和 題39&#xff1a;組合總和1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【值傳遞回溯】2) 改進版一【引用傳遞堆棧回溯】3) 改進版二【過程值列表緩存遍歷后檢索】 4. 最優算法5. 相關資源 本文為Python算法題集之一的…

.halo勒索病毒的最新威脅:如何恢復您的數據?

尊敬的讀者&#xff1a; 隨著科技的發展&#xff0c;網絡安全已經成為我們日常生活中不可忽視的重要議題。其中&#xff0c;勒索病毒是當前網絡安全威脅中的一大挑戰&#xff0c;而“.halo”勒索病毒更是近期備受關注的惡意軟件之一。本文將介紹關于“.halo”勒索病毒的背景知…