」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 網格中訪問單元格的最短時間

網格中訪問單元格的最短時間

發佈於2025-03-28
瀏覽:499

2577。在网格中访问单元格的最小时间

[2

给您一个M X n矩阵网格,由组成,其中grid [row] [col] [col] [col]代表最小的时间所需的时间才能访问单元格(行,col),这意味着您可以在访问小区(col,col,col,col,col)或等于时间的时间或等于col,或等于时间。

您站在0

中的矩阵的top-left 相邻的单元格:向上,向上,向下,左,右。您所做的每一步都需要1秒钟。 返回

最小

您可以访问矩阵的右下方单元格所需的时间。如果您无法访问右下角单元格,则返回-1 [2 [2 grid = [[0,1,3,2],[5,1,2,5],[4,3,8,6]]

7 说明:我们可以采取的路径之一是:

在t = 1时,我们移至单元格(0,1)。可能是因为网格[0] [1] 在t = 2时,我们移至单元格(1,1)。可能是因为网格[1] [1] 在t = 3时,我们移至单元格(1,2)。可能是因为网格[1] [2] 在t = 4时,我们转到单元格(1,1)。可能是因为网格[1] [1] 在t = 5时,我们移至单元格(1,2)。可能是因为网格[1] [2] 在t = 6时,我们转到单元格(1,3)。可能是因为网格[1] [3] 在t = 7时,我们移至单元格(2,3)。可能是因为网格[2] [3] 的最后时间是7。可以证明这是可能的最小时间。 [2 [2

Minimum Time to Visit a Cell In a Grid

grid = [[0,2,4],[3,2,1],[1,0,4]]
  • [2 说明:
  • 从左上角到底部的单元格。
  • [2
  • m == grid.length
  • n == grid [i] .length
      2
  • 4 sup> 5
  • 0 sup> 5
  • grid [0] [0] == 0
  • 暗示:
  • 尝试使用一些可以在图上找到最短路径的算法。
  • 考虑必须在矩阵的两个单元格之间来回移动以解锁其他一些单元格的情况。
解决方案:

我们可以使用[优先Queue

dijkstra的算法

的修改版本。这个问题本质上要求我们找到访问左上角小区右下右键所需的最短时间,在该单元中,每个举动都根据网格中的值都有时间约束。 Minimum Time to Visit a Cell In a Grid 方法:

  • 图表示:将网格中的每个单元格视为节点。边缘是您可以移动到的相邻单元格(向上,向下,左,右)。 优先队列(min-heap)
  • :使用优先队列始终以最少的时间探索单元格。这样可以确保我们按照最早的时间来处理细胞。
  • 修改BFS :对于每个单元格,我们将检查是否可以移动到其相邻的单元格,并更新我们可以访问它们的时间。如果在以后的时间比当前访问了一个单元格,我们将其添加到新的时间中。早期出口
  • 让我们在PHP中实现此解决方案: 2577。在网格
中访问单元格的最小时间

解释:
  • [2 Splpriorityqueue用于确保首先处理具有最短时间的细胞。优先级存储为-Time,因为PHP的splpriorityqueue默认情况下是最大的。 [2 从左上角的单元格(0,0)开始,考虑到每个可访问的最早时间(Max(0,Grid [NewRow] [NewCol] [NewCol] - (时间1)))。 [2 访问的数组跟踪已经处理的单元格,以避免冗余计算和无限循环。 [2 该算法确保我们保持在网格的范围内,并且仅处理有效的邻居。 [2 每一个动作都需要一秒钟,如果单元格需要等待(即网格[newrow] [newcol]>时间1),则算法等到所需的时间。 [2 如果队列耗尽并且未达到右下方单元格,则函数返回-1。
  • 复杂性分析
  • [2
  • Each cell is added to the priority queue at most once:
  • O(m x n x log(m x n))
, where

m

and
  1. n
  2. are the grid dimensions.

[2

The space for the priority queue and the visited array is

O(m x n).

  1. 示例运行

    输入:

    $ grid = [ [0,1,3,2], [5,1,2,5], [4,3,8,6] ]; 回声最小时间($网格); //输出:7
  2. 输入:

    $ grid = [ [0,2,4], [3,2,1], [1,0,4] ]; 回声最小时间($网格); //输出:-1

    此解决方案效率很高,并且在约束中效果很好。
  3. [2
  4. 如果您发现此系列有帮助,请考虑在Github上给

    如果您想要这样的更多有用的内容,请随时关注我:

    [2 [2
版本聲明 本文轉載於:https://dev.to/mdarifulhaque/2577-minimum-time-to-visit-a-cell-in-a-grid-3eg5?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-07-18
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-07-18
  • FastAPI自定義404頁面創建指南
    FastAPI自定義404頁面創建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    程式設計 發佈於2025-07-18
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-18
  • MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    MySQL中如何高效地根據兩個條件INSERT或UPDATE行?
    在兩個條件下插入或更新或更新 solution:的答案在於mysql的插入中...在重複鍵更新語法上。如果不存在匹配行或更新現有行,則此功能強大的功能可以通過插入新行來進行有效的數據操作。如果違反了唯一的密鑰約束。 實現所需的行為,該表必須具有唯一的鍵定義(在這種情況下為'名稱'...
    程式設計 發佈於2025-07-18
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-18
  • PHP未來:適應與創新
    PHP未來:適應與創新
    PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。 引言在編程世界中,PHP一直是網頁開發的中流砥柱。作為一個從1994年就開始發展...
    程式設計 發佈於2025-07-18
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-07-18
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-18
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,以便更快地搜索這些前綴。 理解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-07-18
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-07-18
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-07-18
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-07-18
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-07-18
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: [python中的concate...
    程式設計 發佈於2025-07-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3