【一起來學AI大模型】算法核心:數組/哈希表/樹/排序/動態規劃(LeetCode精練)

以下是五大核心算法的重點解析和LeetCode經典題解,包含最優解法和模板代碼:


一、數組操作(雙指針/滑動窗口)

核心思想:通過索引指針高效遍歷與操作數組

1. 移動零(No.283)
def moveZeroes(nums):slow = 0for fast in range(len(nums)):if nums[fast] != 0:nums[slow], nums[fast] = nums[fast], nums[slow]slow += 1
2. 盛最多水的容器(No.11)
def maxArea(height):left, right = 0, len(height)-1max_area = 0while left < right:area = min(height[left], height[right]) * (right - left)max_area = max(max_area, area)if height[left] < height[right]:left += 1else:right -= 1return max_area
3. 最小覆蓋子串(No.76)滑動窗口模板
def minWindow(s, t):from collections import Counterneed = Counter(t)missing = len(t)left = start = end = 0for right, char in enumerate(s, 1):if need[char] > 0:missing -= 1need[char] -= 1if missing == 0:  # 窗口滿足條件# 收縮左邊界while left < right and need[s[left]] < 0:need[s[left]] += 1left += 1# 更新結果if not end or right-left <= end-start:start, end = left, right# 移動左邊界need[s[left]] += 1missing += 1left += 1return s[start:end]

二、哈希表應用(快速查找)

核心思想:空間換時間,實現O(1)查找

1. 兩數之和(No.1)
def twoSum(nums, target):seen = {}for i, num in enumerate(nums):if target - num in seen:return [seen[target-num], i]seen[num] = ireturn []
2. 字母異位詞分組(No.49)
def groupAnagrams(strs):from collections import defaultdictd = defaultdict(list)for s in strs:key = ''.join(sorted(s))d[key].append(s)return list(d.values())
3. 最長連續序列(No.128)
def longestConsecutive(nums):num_set = set(nums)max_len = 0for num in num_set:# 確保從序列起點開始if num-1 not in num_set:curr = numcurr_len = 1while curr+1 in num_set:curr += 1curr_len += 1max_len = max(max_len, curr_len)return max_len

三、樹形結構(遞歸/迭代)

核心思想:分治思想處理子樹,棧/隊列輔助迭代

1. 二叉樹的最大深度(No.104)
# 遞歸
def maxDepth(root):if not root: return 0return 1 + max(maxDepth(root.left), maxDepth(root.right))# 迭代(BFS)
from collections import deque
def maxDepth(root):if not root: return 0queue = deque([root])depth = 0while queue:depth += 1for _ in range(len(queue)):node = queue.popleft()if node.left: queue.append(node.left)if node.right: queue.append(node.right)return depth
2. 驗證二叉搜索樹(No.98)
def isValidBST(root):def valid(node, low=-float('inf'), high=float('inf')):if not node: return Trueif node.val <= low or node.val >= high:return Falsereturn (valid(node.left, low, node.val) and valid(node.right, node.val, high))return valid(root)
3. 二叉樹的最近公共祖先(No.236)
def lowestCommonAncestor(root, p, q):if not root or root == p or root == q:return rootleft = lowestCommonAncestor(root.left, p, q)right = lowestCommonAncestor(root.right, p, q)if left and right: return rootreturn left if left else right

四、排序算法(歸并/快排)

核心思想:分治策略實現高效排序

1. 快速排序模板
def quick_sort(arr, l, r):if l >= r: return# 分區操作pivot = partition(arr, l, r)quick_sort(arr, l, pivot-1)quick_sort(arr, pivot+1, r)def partition(arr, l, r):import random# 隨機選擇基準避免最壞情況rand_idx = random.randint(l, r)arr[rand_idx], arr[r] = arr[r], arr[rand_idx]pivot_val = arr[r]i = lfor j in range(l, r):if arr[j] < pivot_val:arr[i], arr[j] = arr[j], arr[i]i += 1arr[i], arr[r] = arr[r], arr[i]return i
2. 合并區間(No.56)
def merge(intervals):intervals.sort(key=lambda x: x[0])merged = []for interval in intervals:if not merged or merged[-1][1] < interval[0]:merged.append(interval)else:merged[-1][1] = max(merged[-1][1], interval[1])return merged
3. 數組中的第K個最大元素(No.215)
def findKthLargest(nums, k):import heapqmin_heap = []for num in nums:heapq.heappush(min_heap, num)if len(min_heap) > k:heapq.heappop(min_heap)return min_heap[0]

五、動態規劃(狀態轉移)

核心思想:定義狀態與狀態轉移方程,避免重復計算

1. 爬樓梯(No.70)基礎模板
def climbStairs(n):if n <= 2: return ndp = [0]*(n+1)dp[1], dp[2] = 1, 2for i in range(3, n+1):dp[i] = dp[i-1] + dp[i-2]return dp[n]
2. 最長遞增子序列(No.300)
# 標準DP解法 O(n2)
def lengthOfLIS(nums):dp = [1]*len(nums)for i in range(1, len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j]+1)return max(dp)# 貪心+二分 O(nlogn)
def lengthOfLIS(nums):tails = []  # 存儲最小尾部元素for num in nums:# 二分查找插入位置l, r = 0, len(tails)while l < r:mid = (l+r)//2if tails[mid] < num:l = mid+1else:r = midif l == len(tails):tails.append(num)else:tails[l] = numreturn len(tails)
3. 編輯距離(No.72)經典二維DP
def minDistance(word1, word2):m, n = len(word1), len(word2)dp = [[0]*(n+1) for _ in range(m+1)]# 初始化邊界for i in range(1, m+1): dp[i][0] = ifor j in range(1, n+1): dp[0][j] = jfor i in range(1, m+1):for j in range(1, n+1):if word1[i-1] == word2[j-1]: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]   # 替換)return dp[m][n]

六、綜合訓練題庫(按難度排序)

類別基礎題(掌握模板)進階題(應用變形)挑戰題(綜合優化)
數組26/27/283/16711/15/16/23842/128/239/295
哈希表1/202/24249/560/76330/76/146/460
100/101/104/226102/105/236124/297/337
排序75/88/147148/179/21556/164/315
DP70/118/12162/64/139/19872/152/312/322

高效訓練建議

  1. 每日專項訓練:每天專注1個算法類型(如周一數組/周二哈希表)

  2. 三遍刷題法

  • 第一遍:獨立解題(30分鐘)

  • 第二遍:學習最優解并復現

  • 第三遍:隔周重做+總結模板

  1. 重點突破

  • 雙指針(數組/字符串)

  • 回溯法(樹形問題)

  • 狀態機(動態規劃)

  • 堆應用(排序/TOP K問題)

核心技巧

  • 數組:左右指針/快慢指針/前綴和

  • 哈希表:空間換時間/計數器

  • 樹:遞歸三要素(終止條件/本級任務/返回值)

  • 排序:歸并分治/快速選擇

  • DP:狀態定義 → 轉移方程 → 初始化 → 遍歷順序

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

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

相關文章

CSS之基礎語法一文全解析

CSS之基礎語法一文全解析 一、CSS語法核心結構&#xff1a;選擇器聲明塊1.1 基礎語法模板1.2 關鍵組成部分 二、選擇器全解析&#xff1a;精準定位目標元素2.1 基礎選擇器&#xff08;必掌握&#xff09;2.1.1 標簽選擇器&#xff08;類型選擇器&#xff09;2.1.2 類選擇器&…

vue 前端動態導入文件 import.meta.glob 導入圖片

背景&#xff1a; 在開發過程中&#xff0c;前端會引入資源文件&#xff0c;這里主要是引入圖片。在開發環境&#xff0c;導入的圖片顯示正常&#xff0c;但是打包部署后&#xff0c;導入的圖片就不能正常顯示。 原因分析&#xff0c;可能有如下幾點&#xff1a; 1.圖片不能顯示…

RocketMQ-Dashboard頁面報Failed to fetch ops home page data錯誤

今天安裝RocketMQ-Dashboard&#xff0c;訪問主頁&#xff0c;頁面彈框提示Failed to fetch ops home page data&#xff0c;F12發現控制臺輸出網絡請求跨域。解決&#xff1a;不要用127.0.0.1訪問&#xff0c;用localhost就不報錯了

0704-0706上海,又聚上了

上次&#xff0c;還是0413&#xff0c;當時寫了一篇&#xff0c;下次相見是何時&#xff1f;也鼓勵自己下次相見是找到工作&#xff08;實習也算&#xff09;&#xff0c;沒想到真找到了&#xff0c;DW App 說到實習&#xff0c;其實沒認真投遞很多&#xff0c;互聯網公司除了阿…

【win電腦-程序CMD自啟動問題-開機就自啟動-查找原因-解決方式】

【win電腦-程序CMD自啟動問題-開機就自啟動-查找原因-解決方式】 1&#xff0c;情況說明&#xff1a;2&#xff0c;問題描述1-這是什么窗口 2-原因分析&#xff1a;3-我的努力-嘗試解決&#xff1a;1&#xff0c;任務管理器中查看狀態2&#xff0c;查看啟動文件夾3&#xff0c;…

Go語言實現雙Token登錄的思路與實現

Go語言實現雙Token登錄的思路與實現 引言 在現代Web應用中&#xff0c;身份認證是保障系統安全的重要環節。傳統的單Token認證方式存在一些安全隱患&#xff0c;如Token泄露可能導致長期風險。雙Token機制&#xff08;Access Token Refresh Token&#xff09;提供了更好的安全…

映射阿里云OSS(對象存儲服務)

參考&#xff1a;使用阿里云進行OSS對象存儲&#xff08;超詳細&#xff09; 一文掌握SpringBoot注解之Component 知識文集(1) ConfigurationProperties注解原理與實戰 1.配置屬性類 AliOssProperties package com.sky.properties;import lombok.Data; import org.springframe…

Java操作word實戰

文章目錄簡介段落頁頭與頁腳頁碼表格圖片批注文本框目錄圖表簡介 Word編程最重要的類是org.apache.poi.xwpf.usermodel.XWPFDocument。涉及的東西十分復雜。而且Apache poi操作word的技術非常不成熟。代碼中本身有很多bug。 ??Maven的依賴為 <dependency><groupId&…

【Flask】flask中get方法和post方法區別

對于post和get在我以前的認知下一直認為是&#xff1a; 前端發送給后端就稱為post 前端需要從后端返回就用get 但是在開發過程中發現了不僅僅如此 區別 GET 意圖&#xff1a;獲取&#xff08;GET&#xff09; 信息。你只是想讀取服務器上已經存在的資源&#xff0c;你不打算改變…

Linux sudo升級

應對 Linux sudo 本地提權漏洞&#xff1a;離線升級 Sudo 到安全版本 一、引言 在 Linux 系統中&#xff0c;sudo&#xff08;superuser do&#xff09;是一個非常重要的工具&#xff0c;它允許授權用戶以超級用戶&#xff08;root&#xff09;的權限執行命令。然而&#xff0c…

ubuntu 6.8.0 安裝xenomai3.3

通過以下步驟來獲取和準備 Linux 內核 6.8.0 的源碼&#xff0c;并應用 Xenomai 補丁&#xff1a; 1. 下載 Linux 內核 6.8.0 源碼 你可以從 The Linux Kernel Archives 下載 Linux 內核 6.8.0 的源碼。以下是具體步驟&#xff1a; 訪問內核官方網站&#xff1a; 打開 The Li…

drawRect 觸發時機

在 iOS 開發中&#xff0c;UIView 的 drawRect: 方法&#xff08;或其底層 CALayer 的繪制&#xff09;的觸發時機是由系統控制的&#xff0c;開發者不能直接調用這些方法。以下是觸發視圖繪制的完整機制&#xff1a;一、核心觸發時機 1. 視圖首次顯示 當視圖被添加到視圖層級時…

1.1_4 計算機網絡的分類

在這個視頻中我們會探討計算機網絡的分類&#xff0c;從不同的角度可以對計算機網絡進行不同的分類&#xff0c;我們會從分布范圍、傳輸技術、拓撲結構、使用者和傳輸介質這樣的幾個維度進行討論&#xff0c;在這門課當中需要注意的是標紅色的幾個分類&#xff0c;其他的類別簡…

03每日簡報20250705

每日簡報 新聞簡報&#xff1a;AI行業信任危機浮現 標題&#xff1a;知名科技作者Alberto Romero發文《我對AI行業正在失去所有信任》 來源&#xff1a;The Algorithmic Bridge&#xff08;算法之橋&#xff09; 核心內容&#xff1a; 作者立場&#xff1a;長期支持AI技術…

Python 多版本環境治理理念驅動的系統架構設計:三維治理、四級隔離、五項自治 原則

Python 多版本與開發環境治理架構設計-CSDN博客 Python 多版本治理理念&#xff08;Windows 平臺 零基礎友好&#xff09;-CSDN博客 Python 多版本開發環境治理&#xff1a;理論架構與實踐-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaP…

C++ 第四階段 文件IO - 第一節:ifstream/ofstream操作

目錄 一、文件 IO 的基本概念 二、文件流的基本操作 1. 打開文件 2. 關閉文件 3. 檢查文件是否成功打開 三、文本文件的讀寫操作 1. 寫入文本文件&#xff08;ofstream&#xff09; 2. 讀取文本文件&#xff08;ifstream&#xff09; 四、二進制文件的讀寫操作 1. 寫…

容聲W60以光水離子科技實現食材“主動養鮮”

炎炎夏日&#xff0c;孩子沉迷電視手機屏幕&#xff0c;視力堪憂&#xff1f;高價買回的“超級食物”羽衣甘藍、車厘子&#xff0c;幾天就蔫了&#xff1f;切開的西瓜放進冰箱&#xff0c;卻怕沾染細菌&#xff1f;7月5日&#xff0c;容聲冰箱“WILL養鮮 高能一夏”新品發布會給…

力扣面試150(13/150)

7.3 380. O(1) 時間插入、刪除和獲取隨機元素 實現RandomizedSet 類&#xff1a; RandomizedSet() 初始化 RandomizedSet 對象bool insert(int val) 當元素 val 不存在時&#xff0c;向集合中插入該項&#xff0c;并返回 true &#xff1b;否則&#xff0c;返回 false 。bool…

需要scl來指定編譯器的clangd+cmake在vscode/cursor開發環境下的配置

最近cursor更新了插件商店&#xff0c;只能使用默認它魔改的c/c插件&#xff08;基于clangd的&#xff09;&#xff0c;手頭剛好在折騰一個cmake工程&#xff0c;試試水嘗試直接配置在cursor上可以編譯運行。 主要是本地環境使用scl來管理gcc/g&#xff0c;所以在配置過程中需要…

docker離線/在線環境下安裝elasticsearch

如果想離線安裝docker、redis、gninx、mysql可參照下面這個。 離線環境下&#xff0c;docker安裝redis、ngnix、mysql 獲取離線包 方式1 找一個能上網的環境&#xff0c;下載elasticsearch的鏡像&#xff0c;然后將這個鏡像導出 docker pull docker.elastic.co/elasticsear…