搜尋

網格遊戲

Jan 22, 2025 am 02:02 AM

2017 年。網格遊戲

難度:

主題:陣列、矩陣、前綴和

給定一個 0 索引 大小為 2 x n 的二維陣列網格,其中 grid[r][c] 表示矩陣上位置 (r, c) 處的點數。兩個機器人正在這個矩陣上玩遊戲。

兩個機器人最初都從 (0, 0) 開始,並希望到達 (1, n-1)。每個機器人只能向右移動((r, c) 到 (r, c 1))或向下((r, c) 到 (r 1, c))。

遊戲開始時,第一個機器人從 (0, 0) 移動到 (1, n-1),收集其路徑上單元格的所有點。對於路徑上遍歷的所有儲存格 (r, c),grid[r][c] 設定為 0。然後,第二個 機器人從 (0, 0) 移動到 (1, n-1) ),收集其路徑上的點。請注意,它們的路徑可能會相互交叉。

第一個機器人想要最小化第二個機器人收集的點數。相較之下,第二個機器人想要最大化它收集的點數。如果兩個機器人都表現最佳,則回傳第二個機器人收集的分數

範例1:

網格遊戲

  • 輸入: grid = [[2,5,4],[1,5,1]]
  • 輸出: 4
  • 說明:第一個機器人所採取的最佳路徑以紅色顯示,第二個機器人所採取的最佳路徑以藍色顯示。
      第一個機器人存取的單元格設定為 0。
    • 第二個機器人將收集 0 0 4 0 = 4 分。

範例2:

網格遊戲

  • 輸入: grid = [[3,3,1],[8,5,2]]
  • 輸出: 4
  • 說明:第一個機器人所採取的最佳路徑以紅色顯示,第二個機器人所採取的最佳路徑以藍色顯示。
      第一個機器人存取的單元格設定為 0。
    • 第二個機器人將收集 0 3 1 0 = 4 分。

範例 3:

網格遊戲

  • 輸入: grid = [[1,3,1,15],[1,3,3,1]]
  • 輸出: 7
  • 說明:第一個機器人所採取的最佳路徑以紅色顯示,第二個機器人所採取的最佳路徑以藍色顯示。
    • 第一個機器人存取的單元格設定為 0。
    • 第二個機器人將收集 0 1 3 3 0 = 7 分。

約束:

  • grid.length == 2
  • n == grid[r].length
  • 1 4
  • 1 5

提示:

  1. 第一個機器人移動到第二排時有n種選擇。
  2. 我們可以使用前綴和來幫助解決這個問題嗎?

解:

我們將使用以下方法:

  1. 前綴和計算:我們將計算網格兩行的前綴和,以有效計算任何子數組的點總和。

  2. 模擬最佳運動:

    • 第一個機器人決定其路徑,以最小化留給第二個機器人的點。
    • 在每個列轉換時,第一個機器人可以選擇向下移動,將網格分成兩部分:
      • 上部剩餘點:過渡列之後頂行的點。
      • 較低剩餘點:過渡列之前的底行中的點。
  3. 最小化第二個機器人的最大分數:

    • 在每次轉換時,計算第二個機器人在第一個機器人的路徑之後可以收集的最大點數。
    • 追蹤所有轉換中這些最大值的最小值。

讓我們用 PHP 實作這個解:2017。網格遊戲

<?php function gridGame($grid) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage
$grid1 = [[2, 5, 4], [1, 5, 1]];
$grid2 = [[3, 3, 1], [8, 5, 2]];
$grid3 = [[1, 3, 1, 15], [1, 3, 3, 1]];

echo gridGame($grid1) . "\n"; // Output: 4
echo gridGame($grid2) . "\n"; // Output: 4
echo gridGame($grid3) . "\n"; // Output: 7
?>

解釋:

  1. 前綴與計算:

    • prefixTop 和 prefixBottom 分別儲存頂行和底行的累積和。
    • 這些可以實現高效率的範圍總和計算。
  2. 模擬第一個機器人的路徑

    • 在每一列 i,第一個機器人可以決定在 i 列之後向下移動。
    • 這將網格分為兩個區域:
      • 第 i 列之後的頂行(收集點:prefixTop[n] - prefixTop[i 1])。
      • 第 i 列之前的底行(收集點:prefixBottom[i])。
  3. 第二個機器人的最優點:

    • 第二個機器人將佔據剩餘兩個區域中的最大值。
    • 我們追蹤所有可能的轉換的最大值中的最小值。
  4. 複雜性

    • 時間複雜度O(n),因為我們計算前綴和並循環遍歷網格一次。
    • 空間複雜度O(n),由於前綴和陣列。

範例演練

輸入:網格 = [[2, 5, 4], [1, 5, 1]]

  • 前綴和
    • 字首頂部 = [0, 2, 7, 11]
    • prefixBottom = [0, 1, 6, 7]
  • 過渡點
    • i = 0:頂部剩餘= 11 - 7 = 9,底部剩餘= 00 → 第二個機器人 = 9
    • .
    • i = 1:頂部剩餘= 11 - 11 = 4,底部剩餘= 11 → 第二個機器人 = 4
    • . i = 2:頂部剩餘= 0,底部剩餘= 6

→第二個機器人=

6.

  • 第二個機器人的最低分數:
  • min(9, 4, 6) = 4
  • .
這與預期輸出相符。 聯絡連結 如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大! 如果您想要更多類似的有用內容,請隨時關注我: 領英 GitHub

以上是網格遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
unset()和session_destroy()有什麼區別?unset()和session_destroy()有什麼區別?May 04, 2025 am 12:19 AM

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

在負載平衡的情況下,什麼是粘性會話(會話親和力)?在負載平衡的情況下,什麼是粘性會話(會話親和力)?May 04, 2025 am 12:16 AM

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

PHP中有哪些不同的會話保存處理程序?PHP中有哪些不同的會話保存處理程序?May 04, 2025 am 12:14 AM

phpoffersvarioussessionsionsavehandlers:1)文件:默認,簡單的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的會話是什麼?為什麼使用它們?PHP中的會話是什麼?為什麼使用它們?May 04, 2025 am 12:12 AM

PHP中的session是用於在服務器端保存用戶數據以在多個請求之間保持狀態的機制。具體來說,1)session通過session_start()函數啟動,並通過$_SESSION超級全局數組存儲和讀取數據;2)session數據默認存儲在服務器的臨時文件中,但可通過數據庫或內存存儲優化;3)使用session可以實現用戶登錄狀態跟踪和購物車管理等功能;4)需要注意session的安全傳輸和性能優化,以確保應用的安全性和效率。

說明PHP會話的生命週期。說明PHP會話的生命週期。May 04, 2025 am 12:04 AM

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

絕對會話超時有什麼區別?絕對會話超時有什麼區別?May 03, 2025 am 12:21 AM

絕對會話超時從會話創建時開始計時,閒置會話超時則從用戶無操作時開始計時。絕對會話超時適用於需要嚴格控制會話生命週期的場景,如金融應用;閒置會話超時適合希望用戶長時間保持會話活躍的應用,如社交媒體。

如果會話在服務器上不起作用,您將採取什麼步驟?如果會話在服務器上不起作用,您將採取什麼步驟?May 03, 2025 am 12:19 AM

服務器會話失效可以通過以下步驟解決:1.檢查服務器配置,確保會話設置正確。 2.驗證客戶端cookies,確認瀏覽器支持並正確發送。 3.檢查會話存儲服務,如Redis,確保其正常運行。 4.審查應用代碼,確保會話邏輯正確。通過這些步驟,可以有效診斷和修復會話問題,提升用戶體驗。

session_start()函數的意義是什麼?session_start()函數的意義是什麼?May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

See all articles

熱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

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

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器