算法提升——LeetCode第385場周賽總結

題目

統計前后綴下標對 I

給你一個下標從0開始的字符串數組words。

定義一個布爾函數isPrefixAndSuffix,它接受兩個字符串參數str1和str2:

當str1同時是str2的前綴(prefix)和后綴(suffix)時,isPrefixAndSuffix(str1,str2)返回true,否則返回false。
例如,isPrefixAndSuffix(“aba”,“ababa”)返回true,因為"aba"既是"ababa"的前綴,也是"ababa"的后綴,但是isPrefixAndSuffix(“abc”,“abcd”)返回false。

以整數形式,返回滿足i<j且isPrefixAndSuffix(words[i],words[j])為true的下標對(i,j)的數量。

解題思路

暴力判斷每一個字符串是否是開頭或結尾,代碼如下:

class Solution {public int countPrefixSuffixPairs(String[] words) {int res=0;int len=words.length;for(int i=0;i<len;i++){for(int j=i+1;j<len;j++){if (isPrefixAndSuffix(words[i],words[j])){res++;}}}return res;}public boolean isPrefixAndSuffix(String a,String b){return  b.startsWith(a)&&b.endsWith(a);}}

最長公共前綴長度

給你兩個正整數數組arr1和arr2。

正整數的前綴是其最左邊的一位或多位數字組成的整數。例如,123是整數12345的前綴,而234不是。

設若整數c是整數a和b的公共前綴,那么c需要同時是a和b的前綴。例如,5655359和56554有公共前綴565,而1223和43456沒有公共前綴。

你需要找出屬于arr1的整數x和屬于arr2的整數y組成的所有數對(x,y)之中最長的公共前綴的長度。

返回所有數對之中最長公共前綴的長度。如果它們之間不存在公共前綴,則返回0。

解題思路

預先處理arr1所有前綴到set中,然后arr2依次判斷即可,代碼如下:

class Solution {public int longestCommonPrefix(int[] arr1, int[] arr2) {Set<Integer> st = new HashSet<>();for (int x : arr1) {for (; x > 0; x /= 10) {st.add(x);}}int mx = 0;for (int x : arr2) {for (; x > 0 && !st.contains(x); x /= 10) ;mx = Math.max(mx, x);}return mx > 0 ? Integer.toString(mx).length() : 0;}
}

出現頻率最高的質數

給你一個大小為mxn、下標從0開始的二維矩陣mat。在每個單元格,你可以按以下方式生成數字:

最多有8條路徑可以選擇:東,東南,南,西南,西,西北,北,東北。

選擇其中一條路徑,沿著這個方向移動,并且將路徑上的數字添加到正在形成的數字后面。

注意,每一步都會生成數字,例如,如果路徑上的數字是1,9,1,那么在這個方向上會生成三個數字:1,19,191。

返回在遍歷矩陣所創建的所有數字中,出現頻率最高的、大于10的質數;如果不存在這樣的質數,則返回-1。如果存在多個出現頻率最高的質數,那么返回其中最大的那個。

注意:移動過程中不允許改變方向。

解題思路

對于每個單元格,枚舉八個方向,生成數字,統計其中質數個數。代碼如下:

class Solution {private static final int[][] DIRS = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};public int mostFrequentPrime(int[][] mat) {int m = mat.length;int n = mat[0].length;Map<Integer, Integer> cnt = new HashMap<>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {for (int[] d : DIRS) {int x = i + d[0];int y = j + d[1];int v = mat[i][j];while (x >= 0 && x < m && y >= 0 && y < n) {v = v * 10 + mat[x][y];if (isPrime(v)) {cnt.merge(v, 1, Integer::sum);}x += d[0];y += d[1];}}}}int ans = -1;int maxCnt = 0;for (Map.Entry<Integer, Integer> e : cnt.entrySet()) {int v = e.getKey();int c = e.getValue();if (c > maxCnt) {ans = v;maxCnt = c;} else if (c == maxCnt) {ans = Math.max(ans, v);}}return ans;}private boolean isPrime(int n) {for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return false;}}return true;}
}

統計前后綴下標對 II

給你一個下標從0開始的字符串數組words。

定義一個布爾函數isPrefixAndSuffix,它接受兩個字符串參數str1和str2:

當str1同時是str2的前綴(prefix)和后綴(suffix)時,isPrefixAndSuffix(str1,str2)返回true,否則返回false。
例如,isPrefixAndSuffix(“aba”,“ababa”)返回true,因為"aba"既是"ababa"的前綴,也是"ababa"的后綴,但是isPrefixAndSuffix(“abc”,“abcd”)返回false。

以整數形式,返回滿足i<j且isPrefixAndSuffix(words[i],words[j])為true的下標對(i,j)的數量。

解題思路

本題跟第一題一致,不過在用暴力法就沒辦法解決了。可以用字典樹解決本題。

class Node {Map<Integer, Node> son = new HashMap<>();int cnt;
}class Solution {public long countPrefixSuffixPairs(String[] words) {long ans = 0;Node root = new Node();for (String S : words) {char[] s = S.toCharArray();int n = s.length;Node cur = root;for (int i = 0; i < n; i++) {int p = (s[i] - 'a') << 5 | (s[n - 1 - i] - 'a');cur = cur.son.computeIfAbsent(p, k -> new Node());ans += cur.cnt;}cur.cnt++;}return ans;}
}

總結

參與了許多周賽,卻始終在第三題上遇到瓶頸,難以突破。反復總結經驗后發現,雖然題解看起來簡單,但親自動手解決時總是遇到難題,無法順利通過。為了改進這一狀況,在接下來的練習中,我打算從第三題開始著手,以此作為突破口,提升我的解題能力。

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

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

相關文章

APP的UI自動化demo(appium+java)

文章目錄 appium連接手機java代碼實現-第一版第二版-接入testng和隱式等待顯示等待 appium連接手機 準備工作 1、查看連接手機模擬器是否連接成功&#xff0c;獲取設備名稱 執行命令&#xff1a;adb devices 2、查看android內核版本號—>paltformVersion 執行命令&#xf…

MQL語言實現單元測試

文章目錄 一、單元測試是什么二、單元測試的過程三、為什么需要單元測試四、MQL測試代碼實現 一、單元測試是什么 單元測試是對軟件中最小可測單元&#xff08;如類或函數&#xff09;進行獨立驗證和檢查的過程。它是由開發工程師完成的&#xff0c;旨在確保每個單元的功能和邏…

Postman接口關聯實戰解析

在使用postman做接口測試時&#xff0c;有時候后面的接口需要獲取前面接口的某一個返回值做為請求參數&#xff0c;這時就可以使用關聯。 如從A接口提取出a字段的值&#xff0c;供B接口的b字段使用。 一個接口的返回報文如下&#xff1a; {"retCode": "0&quo…

SwiftUI 集合視圖(Grid)拖放交換 Cell 的極簡實現

概覽 自從 SwiftUI 橫空出世那天起&#xff0c;小伙伴們都感受到了它驚人的簡單與便捷。而在本課中&#xff0c;我們將會用一個小“栗子”更直觀的讓大家體驗到它無與倫比簡潔的描述性特質&#xff1a; 如上圖所示&#xff0c;我們在 SwiftUI 中實現了 Grid 中拖放交換 Cell 的…

基于SpringBoot + Layui的社區物業管理系統

項目介紹 社區物業管理系統是基于java編程語言&#xff0c;springboot框架&#xff0c;idea工具&#xff0c;mysql數據庫進行開發&#xff0c;本系統分為業主和管理員兩個角色&#xff0c;業主可以登陸系統&#xff0c;查看車位費用信息&#xff0c;查看物業費用信息&#xff0…

2個wordpress優化SEO主題模板

SEO優化wordpress主題 簡潔的SEO優化wordpress主題&#xff0c;效果好不好&#xff0c;結果會告訴你&#xff0c;適合SEO公司使用的主題。 https://www.jianzhanpress.com/?p2804 SEO優化海外WordPress主題 簡潔的SEO優化海外服務商WordPress主題&#xff0c;為中國制造202…

C# byte[]、struct、intptr、byte[]和byte*等的相互轉換

struct、byte[]互相轉換 //struct轉換為byte[] public static byte[] StructToBytes(object structObj) {int size Marshal.SizeOf(structObj);IntPtr buffer Marshal.AllocHGlobal(size);try{Marshal.StructureToPtr(structObj, buffer, false);byte[] bytes new byte[siz…

HTTP REST 方式調用WebService接口(wsdl)

一、WebService接口正常使用SOAP協議調用&#xff0c;測試時常采用SoapUI軟件調用&#xff0c;具體如下&#xff1a; 二、由于目前主流web服務逐漸轉換為RESTful的形式&#xff0c;且SOAP協議的實現也是基于HTTP協議&#xff0c;故存在通過HTTP調用WebService接口的可能 2.1 …

Flink雙流(join)

一、介紹 Join大體分類只有兩種&#xff1a;Window Join和Interval Join Window Join有可以根據Window的類型細分出3種&#xff1a;Tumbling(滾動) Window Join、Sliding(滑動) Window Join、Session(會話) Widnow Join。 &#x1f338;Window 類型的join都是利用window的機制…

【OpenFeign常用配置】

OpenFeign常用配置 快速入門&#xff1a;1、引入依賴2、啟用OpenFeign 實踐1、引入依賴2、開啟連接池功能3、模塊劃分4、日志5、重試 快速入門&#xff1a; OpenFeign是一個聲明式的http客戶端&#xff0c;是spring cloud在eureka公司開源的feign基礎上改造而來。其作用及時基于…

C++ template-2

第 5 章 基礎技巧 5.1 typename 關鍵字 關鍵字typename在C標準化過程中被引入進來&#xff0c;用來澄清模板內部的一個標識符代表的 是某種類型&#xff0c;而不是數據成員。考慮下面這個例子&#xff1a; template<typename T> class MyClass { public:void foo() {t…

【代碼隨想錄算法訓練營Day09】28.實現 strStr(); 459.重復的子字符串

文章目錄 Day 9 第四章 字符串part0228. 實現 strStr() &#xff08;本題可以跳過&#xff09;KMP 思路KMP 代碼 459.重復的子字符串 &#xff08;本題可以跳過&#xff09;字符串總結雙指針回顧 Day 9 第四章 字符串part02 今日任務 28.實現 strStr(); 459.重復的子字符串; 字…

題目:C++快速找到未知長度單鏈表的中間節點。普通方法和高級方法2種解題思路解析。

在數據結構的面試中&#xff0c;經常會出現這樣的問題&#xff1a;如何快速找到未知長度單鏈表的中間節點&#xff1f;通常&#xff0c;面試官會期待你提供兩種解法&#xff1a;一種是最基本的普通方法&#xff0c;另一種是更高效的 advanced 方法。本文將詳細介紹這兩種方法。…

Nginx -2

接著上文寫 5.4.7 驗證模塊 需要輸入用戶名和密碼 模塊名稱&#xff1a;ngx_http_auth_basic_module 訪問控制基于模塊 ngx_http_auth_basic_module 實現&#xff0c;可以通過匹配客戶端資源進行限制 語法&#xff1a; Syntax: auth_basic string | off; Default: auth_ba…

威爾金森功分器基本原理學習筆記

威爾金森功分器基本原理 威爾金森功率分配器的功能是將輸入信號等分或不等分的分配到各個輸出端口&#xff0c;并保持相同輸出相位。環形器雖然有類似功能&#xff0c;但威爾金森功率分配器在應用上具有更寬的帶寬。微帶形功分器的電路結構如圖所示&#xff0c;其中&#xff0…

【OpenAI Sora】何時開放使用?付費課程已上線(sora什么時候開放使用 )

Sora何時開放使用 根據提供的信息&#xff0c;Sora目前還未對廣大用戶開放。OpenAI在2024年2月15日展示了Sora的視頻&#xff0c;但沒有設立等待名單或提供API訪問。Sora仍在開發中&#xff0c;正在接受安全測試&#xff0c;并且尚未向公眾開放使用。 付費課程已上線 根據最…

Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操作

Vue圖片瀏覽組件v-viewer&#xff0c;支持旋轉、縮放、翻轉等操作 之前用過viewer.js&#xff0c;算是市場上用過最全面的圖片預覽。v-viewer&#xff0c;是基于viewer.js的一個圖片瀏覽的Vue組件&#xff0c;支持旋轉、縮放、翻轉等操作。 基本使用 安裝&#xff1a;npm安裝…

費舍爾FISHER金屬探測器探測儀維修F70

美國FISHER LABS費舍爾地下金屬探測器&#xff0c;金屬探測儀等維修&#xff08;考古探金銀銅探寶等儀器&#xff09;。 費舍爾F70視聽目標ID金屬探測器&#xff0c;Fisher 金屬探測器公司成立于1931年&#xff0c;在實驗條件很艱苦的情況下&#xff0c;研發出了地下金屬探測器…

【Python】實現一個類似于Glass2k的Windows窗口透明化軟件

一 背景說明 網上看到一款Windows下的窗口透明化工具Glass2k&#xff08;Glass2k官網&#xff09;&#xff0c;可以簡單地通過快捷鍵實現任意窗口的透明化&#xff0c;還挺方便的&#xff0c;想用Python自己實現一下類似的功能。 軟件已經開源到&#xff1a;窗口透明化小工具開…

【Leetcode】889. 根據前序和后序遍歷構造二叉樹

文章目錄 題目思路代碼結果 題目 題目鏈接 給定兩個整數數組&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一個具有 無重復 值的二叉樹的前序遍歷&#xff0c;postorder 是同一棵樹的后序遍歷&#xff0c;重構并返回二叉樹。 如果存在多個答案&#xff0c;…