2025高頻面試算法總結篇【持續更新中】

文章目錄

  • 遞歸&回溯
    • 131. 分割回文串
    • 面試題 08.12. 八皇后
  • 動態規劃
    • 72編輯距離
    • 5. 最長回文子串
    • 279. 完全平方數
    • 300. 最長遞增子序列


遞歸&回溯

131. 分割回文串

在這里插入圖片描述
回溯思路:

臨界條件:
if (start == s.length) => 保存
循環遍歷這個字串
for (int i = start;i < s.length();i++)if (s[start:i] 是 回文串) => dfs(i+1)

回文串的判斷:

  1. 可以直接判斷。
  2. 可以采用動態規劃的方式進行記錄,dp[i][j]定義為s[i:j]字串是否是回文串,d[i][j] = s[i]==s[j] && d[i+1][j-1]
class Solution {List<List<String>> ans = new ArrayList<>();public List<List<String>> partition(String s) {if (s == null || s.length() == 0) {return ans;}dfs(s, 0, new ArrayList<>());return ans;}private void dfs (String s, int start, List<String> res) {if (start == s.length()) {ans.add(new ArrayList<>(res));return;}for (int i = start; i < s.length(); i++) {if (huiwen(s.substring(start, i+1))) {res.add(s.substring(start, i+1));dfs(s, i+1, res);res.remove(res.size() - 1);}}}private boolean huiwen(String substring) {int left = 0;int right = substring.length() -1;while (left < right) {if (substring.charAt(left) != substring.charAt(right)) {return false;}left++;right--;}return true;}}

面試題 08.12. 八皇后

在這里插入圖片描述
回溯思路:定義一個一維數組即可cols[row] = x,第row行的皇后在第x列。

臨界條件:
if (row == N) =》保存
遞歸&回溯:遍歷當前這一行的數據
for (int col = 0; col < N; col++)if [row][col] 符合 題意 :=》下一行dfs(row+1)

[row][col] 符合 題意:

  1. 不同行已經確保了,需要判斷不同列:cols[0:row] != col
  2. 對角線的判斷:row - col == i - cols[i](左對角線沖突)& row + col == i + cols[i](右對角線沖突)【簡單記憶:絕對值:行-遍歷的行==列-遍歷的列Math.abs(row - i) == Math.abs(col - cols[i])
class Solution {List<List<String>> ans = new ArrayList<>();public List<List<String>> solveNQueens(int n) {if (n == 0) return ans;dfs(0, n, new int[n]);return ans;}private void dfs(int row,int n, int[] cols) {if (row == n) {// 保存ans.add(board(cols));return;}for (int col = 0; col < n; col++) {if (helper(row, col, cols)) {cols[row] = col;dfs(row+1, n, cols);cols[row] = 0;}}}private boolean helper(int row,int col,int[] cols) {if (row == 0) return true;for (int i = 0; i < row; i++) {if (cols[i] == col|| Math.abs(row - i) == Math.abs(col - cols[i])) {return false;}}return true;}private List<String> board (int[] cols) {List<String> res = new ArrayList<>();char[] s = new char[cols.length];for (int i = 0; i < cols.length; i++) {Arrays.fill(s, '.');s[cols[i]] = 'Q';res.add(new String(s));}return res;} }

動態規劃

72編輯距離

在這里插入圖片描述
定義:dp[i][j]表示word1[0:i]編輯成word2[0:j]所使用的最少操作數 。
公式:初始 i=0 dp[0][j] = j , j=0, dp[i][j] = i if s[i] == s[j] dp[i][j] = dp[i-1][j-1] else dp[i][j] = 1+ Math.min(插入dp[i][j-1],刪除dp[i-1][j], 替換 dp[i-1][j-1])

class Solution {// 定義// dp[i][j]:  word1[0:i] 轉換成 word2[0:j] 所使用的最少操作數// 邊界// d[0][0] = 0// d[i][0] = i d[0][j] = j// 狀態轉移// dp[i][j] =// if w1[i] == w2[j] => dp[i][j] = dp[i-1][j-1]// else 刪插換 dp[i][j] = 1 + min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i <= word1.length(); i++) {dp[i][0] = i;}for (int j = 0; j <= word2.length(); j++) {dp[0][j] = j;}for (int i = 1; i <= word1.length(); i++) {for (int j = 1; j <= word2.length(); j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];}else {dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i-1][j-1]) + 1;}}}return dp[word1.length()][word2.length()];}
}

5. 最長回文子串

在這里插入圖片描述
定義:dp[i][j] 表示 s[i:j]是否是回文串
公式:dp[i][i] = true 單個字符一定是回文串,dp[i][j] = (s[i] == s[j]) && (len == 2 || dp[i + 1][j - 1])

class Solution {public String longestPalindrome(String s) {boolean[][] dp = new boolean[s.length()][s.length()];for (int i = 0; i < s.length(); i++) {dp[i][i] = true;}int start = 0;int maxLen = 1;for (int len = 2; len <= s.length(); len++) {for (int i = 0; i <= s.length() - len; i++) {int j = i + len - 1;if (s.charAt(i) == s.charAt(j)) {if (len == 2) {dp[i][j] = true;}else {dp[i][j] = dp[i + 1][j - 1];}}if (dp[i][j] && maxLen < len) {maxLen = len;start = i;}}}return s.substring(start, start + maxLen);}
}

279. 完全平方數

在這里插入圖片描述
定義:dp[i] 和為 i 的完全平方數的最少數量 。
公式: dp[0]=0 dp[i]=Math.min(dp[i], dp[i-j*j]+1)

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp, Integer.MAX_VALUE);dp[0] = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j*j <= i;j++) {dp[i] = Math.min(dp[i], dp[i-j*j]+1);}}return dp[n];}
}

300. 最長遞增子序列

在這里插入圖片描述
定義:dp[i] 表示以nums[i]結尾的最長遞增子序列的長度。
公式:dp[i]=max(dp[i],dp[j]+1)(其中 j<i 且 nums[j]<nums[i])

class Solution {public int lengthOfLIS(int[] nums) {if (nums == null || nums.length == 0) {return 0;}// dp[i] = dp[i-x] + 1int[] dp = new int[nums.length + 1];Arrays.fill(dp, 1);for (int i = 1; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}if (dp[i] > dp[nums.length]) {dp[nums.length] = dp[i];}}return dp[nums.length];}
}

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

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

相關文章

【大模型學習】第二十二章 什么是對抗生成網絡

目錄 一、背景介紹 二、生活化例子說明什么是對抗生成網絡 三、技術細節詳解 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;訓練機制 &#xff08;三&#xff09;損失函數 一、背景介紹 對抗生成網絡&#xff08;Generative Adversarial Networks, GANs…

攝像頭模塊ISP處理流程

攝像頭模塊的ISP&#xff08;圖像信號處理器&#xff09;處理流程是對圖像傳感器輸出的原始信號進行系統性優化的過程&#xff0c;主要分為以下關鍵步驟及對應功能模塊&#xff1a; 一、原始信號輸入與預處理 ?傳感器信號捕獲? CMOS/CCD傳感器將光信號轉換為模擬電信號&…

linux系統安裝和激活conda

安裝 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash ./Miniconda3-latest-Linux-x86_64.sh回車到最后按照輸入yes&#xff0c;之后按提示操作。 激活 conda activate如果沒有反應或者返回&#xff1a; bash: conda: command not found則…

(全)2024下半年真題 系統架構設計師 綜合知識 答案解析02

系統架構設計師第二版教程VIP課程https://edu.csdn.net/course/detail/40283 面向對象技術 在UML用例圖中&#xff0c;參與者之間存在 關系。 A. 聚合 B. 包含 C. 繼承 D. 擴展 答案&#xff1a;C 解析&#xff1a;用例圖描述了一組用例、參與者以及它們之間的關系…

【學習筆記】《逆向工程核心原理》03.abex‘crackme-2、函數的調用約定、視頻講座-Tut.ReverseMe1

文章目錄 abexcrackme-21. Visual Basic文件的特征1.1. VB專用引擎1.2. 本地代碼與偽代碼1.3. 事件處理程序1.4. 未文檔化的結構體 2. 開始調試2.1. 間接調用2.2. RT_MainStruct結構體2.3. ThunRTMain()函數 3. 分析crackme3.1. 檢索字符串3.2. 查找字符串地址3.3. 生成Serial的…

深入解析Go語言Channel:源碼剖析與并發讀寫機制

文章目錄 Channel的內部結構Channel的創建過程有緩沖Channel的并發讀寫機制同時讀寫的可能性發送操作的實現接收操作的實現 并發讀寫的核心機制解析互斥鎖保護環形緩沖區等待隊列直接傳遞優化Goroutine調度 實例分析&#xff1a;有緩沖Channel的并發讀寫性能優化與最佳實踐緩沖…

初識Linux(14)Ext系列?件系統

之前談論的都是已打開文件在操作系統的中的管理&#xff0c;但是還有更多的文件沒有被打開&#xff0c;被存在磁盤中&#xff0c;如何管理這些磁盤中的文件&#xff0c;就是本篇的學習目標。 目錄 1.理解硬件 磁盤結構 扇區的讀寫 CHS地址定位 磁盤的邏輯結構 2. 引??件…

電機控制常見面試問題(十二)

文章目錄 一.電機鎖相環1.理解鎖相環2.電機控制中的鎖相環應用3.數字鎖相環&#xff08;DPLL&#xff09; vs 模擬鎖相環&#xff08;APLL&#xff09;4.鎖相環設計的關鍵技術挑戰5.總結 二、磁鏈觀測1.什么是磁鏈&#xff1f;2.為什么要觀測磁鏈&#xff1f;3.怎么觀測磁鏈&am…

Android `%d` 與 `1$%d` 格式化的區別

在 Android 開發中&#xff0c;我們經常需要對字符串進行格式化處理&#xff0c;比如動態填充數字、日期、字符等。 其中&#xff0c;%d 和 1$%d 都是格式化占位符&#xff0c;但它們在使用上有一些不同。 本文將詳細解析這兩者的區別&#xff0c;并結合 Kotlin 代碼示例幫助你…

SpringBoot中使用kaptcha生成驗證碼

簡介 kaptcha是谷歌開源的簡單實用的驗證碼生成工具。通過設置參數&#xff0c;可以自定義驗證碼大小、顏色、顯示的字符等等。 Maven引入依賴 <!-- https://mvnrepository.com/artifact/pro.fessional/kaptcha --><dependency><groupId>pro.fessional<…

如何在PHP中實現數據加密與解密:保護敏感信息

如何在PHP中實現數據加密與解密&#xff1a;保護敏感信息 在現代Web開發中&#xff0c;數據安全是一個至關重要的議題。無論是用戶的個人信息、支付數據&#xff0c;還是其他敏感信息&#xff0c;都需要在存儲和傳輸過程中進行加密&#xff0c;以防止數據泄露和惡意攻擊。PHP作…

單元測試、系統測試、集成測試、回歸測試的步驟、優點、缺點、注意點梳理說明

單元測試、系統測試、集成測試、回歸測試的梳理說明 單元測試 步驟&#xff1a; 編寫測試用例&#xff0c;覆蓋代碼的各個分支和邊界條件。使用測試框架&#xff08;如JUnit、NUnit&#xff09;執行測試。檢查測試結果&#xff0c;確保代碼按預期運行。修復發現的缺陷并重新測…

C++能力測試題

以下是一些C能力測試題&#xff0c;涵蓋了從基礎語法到高級特性的多個方面&#xff1a; 選擇題 1. 下面關于RTTI的說法&#xff0c;正確的是&#xff1f; A. 使用typeid前必須包含<type_info>頭文件。 B. typeid只能用于多態類型或表達式。 C. typeid可以用于不完整類型…

模擬類似 DeepSeek 的對話

以下是一個完整的 JavaScript 數據流式獲取實現方案&#xff0c;模擬類似 DeepSeek 的對話式逐段返回效果。包含前端實現、后端模擬和詳細注釋&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

【訓練細節解讀】文本智能混合分塊(Mixtures of Text Chunking,MoC)引領RAG進入多粒度感知智能分塊階段

RAG系統在處理復雜上下文時,傳統和語義分塊方法的局限性,文本分塊的質量限制了檢索到的內容,從而影響生成答案的準確性。盡管其他算法組件有所進步,但分塊策略中的增量缺陷仍可能在一定程度上降低整體系統性能。如何直接量化分塊質量?如何有效利用大型語言模型(LLMs)進行…

IMA+DeepSeekR1+本地知識庫撰寫NOIP2008普及組T3【傳球游戲】題解

目錄 一、提問詞 二、DeepSeekR1回復 題目描述 解題思路 實現代碼 代碼說明 三、說明 【IMADeepSeekR1本地知識庫】撰寫NOIP2008普及組復賽題解系列 1、IMADeepSeekR1本地知識庫撰寫NOIP2008普及組T1【ISBN 號碼】題解-CSDN博客 2、IMADeepSeekR1本地知識庫撰寫NOIP200…

Nginx正向代理HTTPS配置指南(僅供參考)

要使用Nginx作為正向代理訪問HTTPS網站&#xff0c;需通過CONNECT方法建立隧道。以下是操作詳細步驟&#xff1a; 1. 安裝Nginx及依賴模塊 需要模塊&#xff1a;ngx_http_proxy_connect_module&#xff08;支持CONNECT方法&#xff09;。 安裝方式&#xff1a;需重新編譯Nginx…

Python 實現機器學習的 房價預測回歸項目

項目目標&#xff1a; 基于房屋特征&#xff08;如房間數、地理位置等&#xff09;預測加州地區的房價中位數。 使用 Python 實現機器學習的 房價預測回歸項目&#xff08;使用 California Housing 數據集&#xff09; 環境準備 # 安裝必要庫&#xff08;若未安裝&#xff09…

聚力·突破·共贏|修飾組學服務聯盟正式成立,共啟協同發展新篇章

2025年3月13日&#xff0c;上海——由中科新生命、杭州微米生物、廣科安德、承啟生物、派森諾生物、胡珀生物等十余家行業標桿企業共同發起的“修飾組學服務聯盟”成立儀式在上海紫竹新興產業技術研究院隆重舉行。聯盟以“聚力突破共贏”為主題&#xff0c;致力于整合修飾組學全…

【Docker項目實戰】使用Docker部署serverMmon青蛇探針(詳細教程)

【Docker項目實戰】使用Docker部署serverMmon青蛇探針 一、serverMmon介紹1.1 serverMmon 簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下載serverMmon鏡像五、…