2024.5.8 —— LeetCode 高頻題復盤

目錄

  • 檢測循環依賴
  • 7. 整數反轉
  • LCR 170. 交易逆序對的總數
  • 55. 跳躍游戲
  • 45. 二叉樹的后序遍歷
  • 50. Pow(x, n)
  • 40. 組合總和 II
  • 74. 搜索二維矩陣
  • 26. 刪除有序數組中的重復項
  • 61. 旋轉鏈表

檢測循環依賴


題目鏈接

def haveCircularDependency(self, n: int, prerequisites):g = [[]for i in range(n)] #鄰接表存儲圖結構indeg = [0 for i in range(n)] #每個點的入度res = [] #存儲結果序列q = deque()#將依賴關系加入鄰接表中g,并各個點入度for pre in prerequisites:a, b = pre[0], pre[1]g[a].append(b)indeg[b] += 1#一次性將入度為0的點全部入隊for i in range(n):if indeg[i] == 0:q.append(i)while q:t = q.popleft()res.append(t)#刪除邊時,將終點的入度-1。若入度為0,果斷入隊for j in g[t]:indeg[j] -= 1if indeg[j] == 0:q.append(j)if len(res) == n:return reselse:return []

類似題目 207. 課程表、210. 課程表 II

7. 整數反轉


題目鏈接

class Solution:def reverse(self, x: int) -> int:sx=str(x)if sx[0]!="-":xx=int(sx[::-1])else:xx=int(sx[:0:-1])xx=-xxreturn xx if -2**31<=xx<=2**31-1 else 0

LCR 170. 交易逆序對的總數


題目鏈接

歸并排序。

class Solution:# nums中逆序對的個數等于左半部分逆序對個數+右半部分逆序對個數+跨左右兩部分逆序對個數def merge(self,left,right):merged=[]i,j=0,0count=0while i<len(left) and j<len(right):if left[i]<=right[j]:merged.append(left[i])i+=1else:merged.append(right[j])j+=1# 說明 left[i] 及其后面的所有元素都大于 right[j]count+=len(left)-iwhile i<len(left):merged.append(left[i])i+=1while j<len(right):merged.append(right[j])j+=1return merged,countdef merge_sort(self,nums):if len(nums)<=1:return nums,0mid=len(nums)//2left,count_left=self.merge_sort(nums[:mid])right,count_right=self.merge_sort(nums[mid:])merged,count_merge=self.merge(left,right)return merged,count_merge+count_left+count_rightdef reversePairs(self, nums: List[int]) -> int:return self.merge_sort(nums)[1]

55. 跳躍游戲


題目鏈接

class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums)==1:return Truei,cover=0,0while i<=cover:cover=max(i+nums[i],cover)if cover>=len(nums)-1:return Truei+=1return False

45. 二叉樹的后序遍歷


題目鏈接

遞歸

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:lis=[]def traversal(root):if not root:returntraversal(root.left)traversal(root.right)lis.append(root.val)traversal(root)return lis

非遞歸

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:WHITE,GRAY=0,1 # 新節點為白色,已訪問過的節點為灰色res = []stack = [(WHITE, root)]while stack:color, node = stack.pop()if node is None: continue# 如果遇到的節點為白色,則將其標記為灰色,然后將其右子節點、自身、左子節點依次入棧。if color == WHITE: stack.append((GRAY, node))stack.append((WHITE, node.right))stack.append((WHITE, node.left))# 如果遇到的節點為灰色,則將節點的值輸出。else:res.append(node.val)return res

50. Pow(x, n)


題目鏈接

class Solution:def myPow(self, x: float, n: int) -> float:# 快速冪if x==0.0:return 0.0if n<0:x,n=1/x,-nres=1while n:if n&1:res*=xx*=xn>>=1return res

40. 組合總和 II


題目鏈接

class Solution:def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:path=[]res=[]def backtracking(candidates,target,s,startIndex):if s>target:returnif s==target:res.append(path[:])return resfor i in range(startIndex,len(candidates)):# 關鍵if i>startIndex and candidates[i]==candidates[i-1] and used[i-1]==False:continues+=candidates[i]path.append(candidates[i])used[i]=Truebacktracking(candidates,target,s,i+1)s-=candidates[i]path.pop()used[i]=Falsecandidates.sort()used=[False]*len(candidates)backtracking(candidates,target,0,0)return res

74. 搜索二維矩陣


題目鏈接

class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:# 二維數組從左往右遞增,從上往下遞增# 故想到以二維數組左下角為原點,建立直角坐標軸m,n=len(matrix),len(matrix[0])i,j=m-1,0while i>=0 and j<n:if target>matrix[i][j]:j+=1elif target<matrix[i][j]:i-=1else:return Truereturn False

26. 刪除有序數組中的重復項


題目鏈接

class Solution:def removeDuplicates(self, nums: List[int]) -> int:i=0for num in nums:if i==0 or nums[i-1]!=num:nums[i]=numi+=1return i

類似題目 27. 移除元素

61. 旋轉鏈表


題目鏈接

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:if not head:return Nonen=1cur=headwhile cur.next:n+=1cur=cur.nextcur.next=head # 成環for _ in range(n-k%n):cur=cur.nextnewHead=cur.nextcur.next=Nonereturn newHead

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

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

相關文章

MATLAB實現遺傳算法優化選址-路徑LRP問題(Location-Routing Problem)

MATLAB實現遺傳算法優化選址-路徑LRP問題(Location-Routing Problem) 一、模型 選址車輛路徑問題&#xff08;Location-Routing Problem, LRP&#xff09;是一個組合優化問題&#xff0c;旨在同時優化設施位置的選擇和車輛的配送路徑。在這個問題中&#xff0c;我們考慮一個由…

機器學習 - 決策樹

1. 決策樹基礎 定義與概念 決策樹是一種監督學習算法&#xff0c;主要用于分類和回歸任務。它通過學習從數據特征到輸出標簽的映射規則&#xff0c;構建一個樹形結構。在分類問題中&#xff0c;決策樹的每個葉節點代表一個類別。 案例分析 假設我們有一個關于天氣和是否進行…

linux防火墻的操作

linux防火墻的操作 前言1查看防火墻狀態2暫時關閉防火墻3永久關閉防火墻4開啟防火墻5開啟指定端口6關閉指定端口7立即生效8查看開放的端口前言 systemctl是管理linux中服務的命令,可以對服務進行啟動、停止、重啟、查看狀態等操作 firewall-cmd是linux中專門用于控制防火墻的…

并發-守護線程setDaemon()

目錄 為什么存在 什么是守護線程 創建守護線程 在使用守護線程時需要注意以下幾點 可以使用isDaemon()方法來檢查線程是否是守護線程 例1&#xff1a;上面提到當JVM中只剩下守護線程的時候&#xff0c;JVM就會退出&#xff0c;那么寫段代碼測試下 例2&#xff1a;thread…

小紅的字符串構造和小紅的排列構造

小紅的字符串構造 小紅希望你構造一個長度為nnn的、僅包含小寫字母的字符串&#xff0c;其中恰好有kkk個長度大于1的回文子串。你能幫幫她嗎&#xff1f;輸入兩個整數n,k&#xff0c;用空格隔開。 1≤n≤10^5,0≤k≤n/2.一個字符串。如果有多解輸出任意即可。 可以證明&#x…

[Bug]:由于中國防火墻,無法連接 huggingface.co

問題描述 : OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like youscan/ukr-roberta-base is not the path to a directory containing a file named config. Json. Checkout your internet …

[AIGC] 幾道 redis數據結構相關面試題

文章目錄 7. 數據類型的實現8. 什么是空間預分配以及惰性空間釋放&#xff0c;SDS 是怎么實現的9. 為什么說 SDS 是二進制安全的呢10. 說說 redis 里的對象11. 使用 RedisObject 的好處12. RedisObject 的具體結構是什么 7. 數據類型的實現 8. 什么是空間預分配以及惰性空間釋放…

Vue3實戰筆記(16)—pinia基本用法--Getter

文章目錄 前言一、pinia的getter簡單理解二、訪問其他 store 的 getter總結 前言 在 Pinia 中&#xff0c;getter 類似于 Vuex 中的 getter&#xff0c;允許你從 store 中派生出一些狀態&#xff0c;而不需要修改原始狀態。這使得我們可以創建基于現有狀態的計算屬性。 一、pi…

練習題(2024/5/12)

1二分查找 給定一個 n 個元素有序的&#xff08;升序&#xff09;整型數組 nums 和一個目標值 target &#xff0c;寫一個函數搜索 nums 中的 target&#xff0c;如果目標值存在返回下標&#xff0c;否則返回 -1。 示例 1: 輸入: nums [-1,0,3,5,9,12], target 9 輸出: 4…

樹莓派C語言開發

安裝C語言編譯器和開發工具 sudo apt update sudo apt install build-essential 此命令會安裝GCC編譯器以及make等其他工具&#xff0c;這些都是C語言程序開發過程中必需的。 配置文本編輯器 樹莓派默認安裝了幾個文本編輯器&#xff0c;如Nano和Vim。如果你對這些編輯器不熟…

如何遠程訪問?

遠程訪問是指在不同的地理位置之間通過網絡連接來實現對目標設備或系統的訪問。無論是在個人生活還是商業領域&#xff0c;遠程訪問都起到了重要的作用&#xff0c;幫助人們實現高效的工作和便捷的生活。本文將介紹一款名為【天聯】的組網產品&#xff0c;它是一款強大的異地組…

Linux與Windows互傳文件【筆記】

Linux與Windows互傳文件【筆記】 前言前言推薦Linux與Windows互傳文件首先確保Windows安裝ssh如何傳送文件問題 最后 前言 這是陳舊已久的草稿2023-05-10 00:01:24 這個是準備把計組課程華為智能計組的&#xff0c;傳輸文件。 最后發現&#xff0c;好像沒有實現了。 現在202…

汽車線控轉向系統介紹

汽車線控轉向系統由方向盤總成、轉向執行總成和主控制器(ECU)三個主要部分以及自動防故障系統、電源等輔助系統組成。 線控轉向系統(Steering-By-Wire)&#xff0c;取消了方向盤和轉向車輪之間的機械連接部件&#xff0c;徹底擺脫了機械固件的限制&#xff0c;完全由電能來實現…

【LeetCode】數組——hashmap的妙用

在遇到一類題目時&#xff0c;通過雙for循環也可暴力破解&#xff0c;但我們可以通過用hashmap來代替一次for循環節約時間開支&#xff0c;在算法上屬于用空間換時間&#xff0c;也能幫助我們更好的理解hashmap這一種重要數據結構&#xff0c;并熟悉hashmap的重要方法。 1.兩數…

31Windows精簡系統下載推薦

Windows精簡系統下載推薦 世界上有很多人在做Windows精簡系統&#xff0c;去掉了他們認為不必要的功能和插件&#xff0c;達到了減小系統安裝包體積&#xff0c;提升系統運行流暢度和穩定性的目的。 筆者推薦使用大佬不忘初心制作的精簡版系統&#xff0c;最精簡windows10系統安…

什么是數據平臺——企業構建Data+AI的基礎數據底座需要的決策參考

什么是數據平臺 標準的解釋是這樣的 Wikipedia A data platform usually refers to a software platform used for collecting and managing data, and acting as a data delivery point for application and reporting software. 數據平臺是指將各類數據進行整合、存儲、處…

你知道C++多少——默認成員函數

&#x1f308;個人主頁&#xff1a;小新_- &#x1f388;個人座右銘&#xff1a;“成功者不是從不失敗的人&#xff0c;而是從不放棄的人&#xff01;”&#x1f388; &#x1f381;歡迎各位→點贊&#x1f44d; 收藏?? 留言&#x1f4dd; &#x1f3c6;所屬專欄&#xff1…

Python vs MATLAB:選擇深度學習的首選編程語言

Python vs MATLAB&#xff1a;選擇深度學習的首選編程語言 在深度學習領域&#xff0c;編程語言的選擇對于初學者的學習路徑和未來的職業發展至關重要。目前&#xff0c;Python和MATLAB都是進行科學計算和數據分析的流行工具&#xff0c;但它們在深度學習社區中的應用和受歡迎…

linux程序分析命令(一)

linux程序分析命令(一) **ldd&#xff1a;**用于打印共享庫依賴。這個命令會顯示出一個可執行文件所依賴的所有共享庫&#xff08;動態鏈接庫&#xff09;&#xff0c;這對于解決運行時庫依賴問題非常有用。**nm&#xff1a;**用于列出對象文件的符號表。這個命令可以顯示出定…

什么事防抖和節流,有什么區別,如何實現

防抖和節流&#xff0c;本質上是優化高頻率執行代碼的一種手段&#xff0c;比如&#xff1a;resize、scroll、keypress、mousemove這些事件在觸發的時候&#xff0c;會不斷調用綁定在事件上的回調函數&#xff0c;這樣極大浪費資源&#xff0c;降低前端性能。 為了優化體驗&am…