首頁 後端開發 php教程 到達角落所需清除的障礙物最少

到達角落所需清除的障礙物最少

Dec 01, 2024 am 10:39 AM

2290。最少清除障礙物才能到達轉角

難度:

主題:陣列、廣度優先搜尋、圖、堆疊(優先權佇列)、矩陣、最短路徑

給你一個 0 索引 大小為 m x n 的 2D 整數陣列網格。每個單元格都有兩個值之一:

  • 0 代表空白單元格,
  • 1 代表可以移除的障礙物

您可以在空白儲存格之間向上、向下、向左或向右移動。

最小障礙物回到移除,這樣你就可以從左上角(0, 0)移到右下角角(m - 1, n - 1).

範例1:

Minimum Obstacle Removal to Reach Corner

  • 輸入: grid = [[0,1,1],[1,1,0],[1,1,0]]
  • 輸出: 2
  • 解釋:我們可以移除 (0, 1) 和 (0, 2) 處的障礙物,創造一條從 (0, 0) 到 (2, 2) 的路徑。
    • 可以證明我們需要移除至少 2 個障礙物,因此我們返回 2。
    • 請注意,可能還有其他方法可以移除 2 個障礙物來建立一條路徑。

範例2:

Minimum Obstacle Removal to Reach Corner

  • 輸入: grid = [[0,1,0,0,0],[0,1,0,1,0],[0,0,0,1,0]]
  • 輸出: 0
  • 解釋:我們可以在不移除任何障礙的情況下從 (0, 0) 移動到 (2, 4),因此我們返回 0。

約束:

  • m == grid.length
  • n == grid[i].length
  • 1 5
  • 2 5
  • grid[i][j] 為 0 或 1。
  • 網格[0][0] == 網格[m - 1][n - 1] == 0

提示:

  1. 將網格建模為圖形,其中單元格是節點,邊是相鄰單元格之間的。有障礙物的單元格的邊緣的成本為 1,所有其他邊緣的成本為 0。
  2. 你能使用0-1廣度優先搜尋或Dijkstra演算法嗎?

解:

我們需要使用圖表來模擬這個問題,其中網格中的每個單元格都是一個節點。目標是從左上角 (0, 0) 導航到右下角 (m-1, n-1),同時最大限度地減少我們需要移除的障礙物 (1s) 的數量。

方法:

  1. 圖形表示:

    • 網格中的每個單元格都是一個節點。
    • 相鄰單元格之間的移動(上、下、左、右)被視為邊緣。
    • 如果一條邊穿過帶有 1(障礙物)的單元格,則成本為 1(移除障礙物),如果它穿過 0(空單元格),則成本為 0。
  2. 演算法選擇:

    • 由於我們需要最小化移除的障礙物數量,因此我們可以使用0-1 BFS(使用雙端隊列的廣度優先搜尋)或Dijkstra 演算法 以及優先級隊列。
    • 0-1 BFS 適合這裡,因為每條邊的成本為 0 或 1。
  3. 0-1 BFS:

    • 我們使用deque(雙端佇列)來處理不同成本的節點:
      • 將成本為 0 的單元推到雙端隊列的前方。
      • 將成本為 1 的單元推到雙端隊列的後面。
    • 這個想法是探索網格並始終先擴展不需要移除障礙物的路徑,並且僅在必要時移除障礙物。

讓我們用 PHP 實作這個解:2290。到達角落所需清除的最小障礙物

解釋:

  1. 輸入解析:

    • 網格被視為二維數組。
    • 計算行和列以進行邊界檢查。
  2. 雙端隊列實作:

    • SplDoublyLinkedList用來模擬雙端佇列。支援在前面(unshift)或後面(push)添加元素。
  3. 已存取陣列:

    • 追蹤已造訪過的儲存格以避免冗餘處理。
  4. 0-1 BFS 邏輯:

    • 從 (0, 0) 開始,成本為 0。
    • 對於每個相鄰單元格:
      • 如果為空(grid[nx][ny] == 0),則以相同的成本將其添加到雙端隊列的前面。
      • 如果它是一個障礙物 (grid[nx][ny] == 1),則將其添加到雙端隊列的後面,並增加成本。
  5. 回傳結果:

    • 到達右下角時,回程費用。
    • 如果不存在有效路徑(儘管問題保證有一個),則回傳 -1。

複雜:

  • 時間複雜度: O(m x n),其中m 是行數,n 是列數。每個單元格都會被處理一次。
  • 空間複雜度:
  • O(m x n),對於存取的陣列和雙端隊列。
  • 此實現在給定的限制內有效地工作。

聯絡連結

如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!

如果您想要更多類似的有用內容,請隨時關注我:

  • 領英
  • GitHub

以上是到達角落所需清除的障礙物最少的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

See all articles