選項
首頁
新聞
什麼是 LeetCode 中的陣列嵌套?2025 DFS 最佳解決方案指南。

什麼是 LeetCode 中的陣列嵌套?2025 DFS 最佳解決方案指南。

2025-11-29
176

陣列嵌套乍看之下可能很複雜,但只要有正確的策略,它就會轉變成一個引人入勝的挑戰。本指南徹底研究 LeetCode 問題 565:陣列嵌套,全面探討如何使用深度先搜索 (DFS) 解決該問題。我們將透過問題描述、解釋為何 DFS 是一種有效的方法、分解演算法、提供詳細的程式碼範例,並討論最佳化策略。最後,您將對陣列嵌套和 DFS 有堅實的了解,讓您有信心處理類似的問題。

重點

掌握 LeetCode 上的陣列嵌套問題說明 (問題 565)。

瞭解為什麼深度第一搜尋 (DFS) 非常適合辨識陣列內的循環。

將 DFS 演算法解構為清楚、易於管理的步驟。

檢閱 Java 和 Python 程式碼實作。

分析時間和空間複雜性的考慮因素。

探索最佳化方法,例如使用訪問的陣列。

跟隨一個循序漸進的範例來強化您的理解能力。

瞭解陣列嵌套

問題說明:LeetCode 565

讓我們從問題的正式定義開始。給你一個包含 'n「 個整數的陣列 」nums「,其中每個值 」nums[i]' 都在 [0, n - 1] 的範圍內。這個陣列代表從 0 到 n-1 的數字的排列。您的目標是確定按照此序列所形成的最長集合(或週期)的長度:

  1. 從任何索引 'i' 開始。
  2. 集合中隨後的元素是 'nums[i]'。
  3. 之後的元素是 'nums[nums[i]]',然後繼續這個模式。
  4. 這個過程一直持續,直到您遇到目前集合中已經遇到的元素為止。

目標是返回在陣列中找到的最大這類集合的長度。這個問題考驗您瀏覽陣列結構和識別循環模式的能力。

為什麼深度第一搜尋 (DFS) 非常適合

深度優先搜尋 (DFS) 對於涉及循環偵測的問題是一種直覺而有效的策略。您可以將陣列概念化為有向圖,其中每個索引都會引導您到另一個索引。DFS 善於有系統地探索這種圖形,在回溯之前盡可能沿著每個分支遍歷。以下是它在陣列嵌套上運作良好的主要原因:

  • 有系統的探索:DFS 在移動到下一個路徑之前,會徹底探索每個潛在路徑,以確保完整遍歷任何循環。
  • 循環偵測:如果在遍歷過程中遇到目前路徑中已經訪問過的節點,就表示您已經成功找出一個循環。跟蹤已訪問節點對此至關重要。
  • 效率:透過標記已到訪節點,我們可以避免多餘的計算,優化整體解決方案。

替代方案

替代方案 1:DFS 的迭代實作

這種深度第一搜尋的迭代方式提供了遞歸的替代方案。以下的 Java 程式碼偵測循環並計算其長度,而不使用遞歸,因此避免了潛在的堆疊溢出問題:

import java.util.Arrays;class Solution {public int arrayNesting(int[] nums) {int n = nums.length;boolean[] visited = new boolean[n];int maxLength = 0;for (int start = 0; start

這個實作的主要優點是:

  • 堆疊溢出預防:迭代循環取代遞歸,消除堆疊深度的疑慮
  • :它繼續使用獨立的陣列來有效率地追蹤哪些元素已被處理
  • :

替代方案 2:就地計算週期長度此

方法直接在輸入陣列中計算週期

長度

,提供了更節省記憶體的解決方案。下面的 Python 程式碼示範了這個就地方法:

class Solution:def arrayNesting(self, nums: List[int]) -> int:n = len(nums)max_length = 0for i in range(n):if nums[i] != -1:# Proceed only if this index hasn't been processedstart = icount = 0while nums[start] != -1:next_index = nums[start]nums[start] = -1# 設定為 -1start = next_indexcount += 1max_length = max(max_length, count)return max_length# 範例 Usagenums = [5,4,0,3,1,6,2]solution = Solution()result = solution.arrayNesting(nums)print(f "Length of the longest cycle: {result}") # 輸出:4

此方法的

主要

優點包括:

  • 降低記憶體佔用量:它不需要透過修改原始清單來建立單獨的訪問陣列
  • :訪問的元素直接在輸入陣列中標記
  • :

DFS 演算法:

我們使用一個名為 'visited「 的布林陣列,其長度與 」nums' 陣列相同。一旦我們在任何循環中探索了索引 'i' 處的元素,visited[i]的值就會被設定為 true。

DFS 函數 (dfs(nums, i, visited))

這個遞迴函數接受 'nums「 陣列、起始索引 」i「 和 」visited' 陣列。

  1. 基本情況:如果visited

[i

  1. ]已經為真,表示這個元素是我們已經測量過

的循環的

  1. 一部分。

    1. Mark as Visited:我們立即將 visited[i]標記為 true,以防止從不同的起點重新進入相同的循環

    2. :

    3. 計算循環長度:循環的總長度是 1 (目前節點的長度) 加上遞歸呼叫所傳回的長度。然後返回這個值。cycle_length = 1 + dfs(nums, next, visited).

    The Main Function (arrayNesting(nums))

    1. 初始化 'visited' 陣列:
    2. 初始化 'maxLength' 為 0:此變數將追蹤找到的最長週期
    3. :遍歷 'nums「 陣列中的每個索引 」i'
    4. :
    5. 更新 'maxLength': max_length = Math.max(max_length,dfs(nums,i,visited)).
    6. 返回 'maxLength':處理所有索引後,回傳maxLength 的最終值。

    pricingtitlepricingDFS

    方法

    的優缺點優點

    有效的週期偵測:非常適合在類圖結構(如此陣列)中尋找週期

    :

    系統化遍歷:

    保證充分探索每個潛在路徑和循環:

    清晰的遞迴結構:遞迴性質為解決問題提供了直接、合乎邏輯的流程。

    缺點

    堆疊溢出的

    可能性

    :對於非常大的輸入大小,深度遞歸可能會導致堆疊滿溢錯誤

    :

    使用 DFS

    解決陣列巢狀問題

    的核心功能與優點主要

    程式

    碼概念及其幫助

    解決陣列巢狀問題的 DFS 實作包含幾個重要的程式設計概念,這些概念有助於其成功:

    • 遞歸:遞歸
    • :
    • DFS 的遞歸特性允許它充分探索
    • 陣列
    • 中的每個潛在路徑,確保不會遺漏任何循環:
    • 這個陣列是提高效率的根本,可防止演算法多次處理任何元素
    • :當演算法嘗試造訪已是目前遍歷路徑一部分的節點時,演算法會偵測到循環
    • :
    • 動態
    • 循環長度計算:每個循環的長度會在 DFS 陣列進行時即時計算
    • :最大化

    步驟

    :

    • 持續更新最大長度,確保最終答案是找到的最大週期。

    透過程式碼範例增進理解為

    說明 DFS 過程,請考慮以下範例:

    給予陣列nums = [5,4,0,3,1,6,2],DFS 演算法的執行方式如下:

    1. 從索引 0 開始,標記索引 0 為已到訪,並繼續到nums[0] 的值,也就是 5。
    2. 從索引 5 開始,將索引 5 標記為已到訪,並移至nums[5],即 6。
    3. 從索引 6 開始,將索引 6 標記為已到訪,並移至nums[6],即 2。
    4. 在索引 2 處,演算法將它標記為已到訪,並發現nums[2] 為 0。由於 0 已經到訪,因此循環 [0, 5, 6, 2] 已經完成,長度為 4。

    演算法正確地識別出這是最長的循環。

    使用

    案例

    使用案例

    為什麼 DFS 比其他圖遍历演算法(如 BFS

    )更適合用

    於此問題?

    這種深入探索使它很自然地偵測到路徑是否循環到先前造訪過的節點,形成循環。廣度第一搜尋 (Breadth-First Search, BFS) 更適合尋找最短路徑,對於這項特定任務來說不太直覺。

    這個問題是否可以在不使用額外空間的情況下解決?

    是的,只要修改原始輸入陣列,就可以得到 O(1) 空間的解決方案。您可以直接在「nums」陣列中標記已訪問的索引,而不需要獨立的「已訪問」陣列,方法是將其值變更為像 -1 之類的哨兵值。

    陣列中的數字範圍 (0 到 n-1)

    對

    解決方案有何影響?

    它保證陣列中的每個值都是陣列本身的有效索引。

    相關問題

    給定一個由 n 個整數組成的陣列 nums,其中 nums[i] 的範圍是 [0, n - 1],您能寫一個函數找出並傳回陣列中最長的週期嗎?請提供 Java 和 Python 的實作

    。以下是 Java 和 Python 中專為尋找最長週期長度而設計的實作: import java.util.Arrays;class Solution {public int arrayNesting(int[] nums) {int n = nums.length;boolean[] visited = new boolean[n];int maxLength = 0;for (int i = 0; i int:n = len(nums)visited = [False] * nmax_length = 0for i in range(n):if not visited[i]:max_length = max(max_length, self.dfs(nums, i, visited))return max_lengthdef dfs(self, nums: List[int], start: int, visited: List[bool]) -> int:if visited[start]:return 0visited[start] = Truenext_val = nums[start]cycle_length = 1 + self.dfs(nums, next_val, visited)return cycle_length# Example Usagenums = [5,4,0,3,1,6,2]solution = Solution()result = solution.arrayNesting(nums)print(f "Length of the longest cycle: {result}")# Output:4這些實作經過最佳化,可以有效率地偵測週期並計算其長度,使用訪問的陣列來避免不必要的重新處理。

    相關文章
    ChatGPT 深度整合功能透過對話解鎖 30 萬部電影與電視節目 ChatGPT 深度整合功能透過對話解鎖 30 萬部電影與電視節目 隨著串流服務以源源不絕的內容淹沒市場,如何協助使用者穿透資訊雜音、找到他們真正想要的內容,已成為業界面臨的一項關鍵挑戰。4月9日,各大串流服務商正式宣布整合ChatGPT應用生態系統。作為首個原生內建此項技術的平台,該服務旨在透過運用 AI 驅動的洞察力,徹底改變觀眾發現與消費影音內容的方式。核心體驗:摒棄關鍵字,以自然語感搜尋在整合ChatGPT 之後,該平台已超越傳統的類型篩選機制,提供更智慧
    如何改善「核心網路指標」以提升 SEO 排名 如何改善「核心網路指標」以提升 SEO 排名 透過 AI 驅動的字幕功能,徹底改變您的影片剪輯工作流程目錄:簡介自動轉錄的關鍵優勢確保準確性並優化輸出結果善用字幕中的搜尋功能無縫匯入現有檔案Transcript.com 介紹透過 Transcript.com 輕鬆編輯靈活的匯出格式全面的語言支援結論簡介Transcripted 是一款運用人工智慧生成自動轉錄文字的 Premiere 外掛程式。本指南將深入探討其核心功能,包括高準確度、進階搜尋
    DingTalk 運用阿里AI的 MuleRun 重構架構,邁入全代理時代 DingTalk 運用阿里AI的 MuleRun 重構架構,邁入全代理時代 丁談新任執行長暨悟空事業群負責人陳宇森,於今日下午發布的內部備忘錄中,揭露了一項重大的組織重整計畫。透過成立「核心平台事業部」並全面整合 AI 代理團隊,丁談正加速推動其企業協作生態系統的智慧轉型。此次重組的核心在於將 AI 技術深度整合至核心業務運作中。DingTalk 已正式將「悟空」與「MuleRun」團隊合併,組成統一的「悟空」團隊,現由前 MuleRun 首席技術長舒俊良領導。 Mule
    相關專題推薦
    設計與藝術 頂尖 AI 插畫工具:更快地創作編輯畫面與封面插圖
    頂尖 AI 插畫工具:更快地創作編輯畫面與封面插圖

    2026 年最新高評分 AI 插畫工具:我們精心挑選的清單收錄了功能強大、設計出色的工具,能助您快速創作出令人驚豔的編輯場景與吸睛的封面藝術。每項選項均經過嚴格的實際測試,並提供免費版與付費版的比較,協助您找到最適合您工作流程的工具。 立即嘗試這些不可錯過的解決方案,釋放您的人工智慧優勢,並提升您的創意生產力。現在就前往 XIX.AI 探索吧。

    10 個工具
    xix.ai
    教育與學習 頂尖 AI 補習老師助您備考:練習數學、科學和英語
    頂尖 AI 補習老師助您備考:練習數學、科學和英語

    2026 年最新、評價最高的考試備考 AI 輔導工具,盡在 XIX.AI!我們精心挑選的清單收錄了多款強大且顛覆傳統的工具,提供免費與付費版本的比較、實際測試,以及每週更新的排行榜。這些工具能幫助您提升寫作效率、簡化複雜主題的學習,並釋放您的學術潛能。 立即探索,發掘最適合您的備考工具,並從今天開始創作,釋放您的 AI 優勢!

    10 個工具
    xix.ai
    金融 用於個人財務管理的 AI 預算規劃工具
    用於個人財務管理的 AI 預算規劃工具

    2026 年最新最佳頂級評分 AI 預算規劃工具,專為個人財務管理打造,現已登陸 XIX.AI!本精選合集收錄了強大且具顛覆性的解決方案,助您開展實際測試、理解消費習慣,並制定個性化計劃以提升生產力。享受免費與付費版的對比及詳細排名。這些必試工具旨在簡化財務管理,助您釋放 AI 優勢。立即探索!

    11 個工具
    xix.ai
    健康與養生 AI 睡眠追蹤助手:透過更佳的睡前習慣提升恢復效果
    AI 睡眠追蹤助手:透過更佳的睡前習慣提升恢復效果

    2026 年最新精選、評價最高的 AI 睡眠追蹤助手,助您獲得最佳恢復效果。這份全面更新的每週指南收錄了強大的工具,提供實際測試報告、免費與付費版本的比較,以及詳細排名,協助您找到必試的解決方案,以提升睡眠品質並培養更好的就寢習慣。 立即造訪 XIX.AI,解鎖您的 AI 優勢。

    10 個工具
    xix.ai
    數據分析 用於產品與營收分析的 AI SQL 協作助手
    用於產品與營收分析的 AI SQL 協作助手

    2026 年最新最佳、評價最高的 AI SQL 輔助工具,專為產品與營收分析打造! XIX.AI 精心甄選了一系列強大且顛覆業界的必試工具,這些工具均經過實戰測試,並透過每週更新的排行榜進行評比。這些工具能透過加速資料分析、簡化複雜查詢,並產生精準洞察來推動更明智的商業決策,從而大幅提升使用者生產力。立即探索,發掘最適合您的工具,釋放您的 AI 優勢!

    14 個工具
    xix.ai
    教育與學習 最佳的「教學型」AI 作業輔助工具:學習概念,而不僅是答案
    最佳的「教學型」AI 作業輔助工具:學習概念,而不僅是答案

    2026 年最新最佳高評價 AI 作業輔助工具:不僅提供答案,更教授核心概念。專為學生打造的強大工具,必試精選清單,每週更新,免費與付費版本比較,實際測試,精準排名,助您充分發揮學習潛能。立即探索,發掘最適合您的工具,讓學習更聰明。

    10 個工具
    xix.ai
    評論 (1)
    0/500
    NicholasLewis
    NicholasLewis 2026-02-21 12:00:40

    Als ich das Problem gestern selbst probiert habe, habe ich ewig gebraucht. Aber die Erklärung hier, wie man mit DFS die optimalen zyklischen Muster findet, ist super nachvollziehbar. Hoffentlich kann ich das bei der nächsten Interview-Frage anwenden. 🤞

    OR