一題多解 遊戲模擬 Jump Game III 青蛙過河 III Leetcode_#1306

閱讀時間約 8 分鐘

題目敘述

題目會給我們一個輸入陣列nums,每個元素值代表那個格子點可以左右位移的固定長度

例如,假設 nums[i] = 3,那麼下一步可以移動到nums[i-3] 或 nums[i+3]這兩個格子點。


題目​給定一個起始點start索引位置,請問我們能不能走到內部數值為0的格子點?

可以的話返回True。

無解的話返回False。


題目的原文敘述


測試範例

Example 1:

Input: arr = [4,2,3,0,3,1,2], start = 5
Output: true
Explanation:
All possible ways to reach at index 3 with value 0 are:
index 5 -> index 4 -> index 1 -> index 3
index 5 -> index 6 -> index 4 -> index 1 -> index 3

Example 2:

Input: arr = [4,2,3,0,3,1,2], start = 0
Output: true
Explanation:
One possible way to reach at index 3 with value 0 is:
index 0 -> index 4 -> index 1 -> index 3

Example 3:

Input: arr = [3,0,2,1,2], start = 2
Output: false
Explanation: There is no way to reach at index 1 with value 0.

約束條件

Constraints:

  • 1 <= arr.length <= 5 * 10^4

輸入陣列arr長度介於1 ~ 5*10^4 之間。

  • 0 <= arr[i] < arr.length

每個陣列元素值都界於0~陣列長度之間。

  • 0 <= start < arr.length

起始點一定是合法位置,不會在界外。


演算法

根據題意描述,這是一條判定路徑存在與否的問題。

抽象地想,我們可以把

每個陣列格子點視為一個節點

陣列的值就代表指向另外兩個節點 i - nums[i] 和 i + nums[i]的指向邊。


到這一步,我們就把路徑存在與否的問題,轉換成圖論上的路徑搜索問題。

現在題目被我們映射到一個等價的問題,從nums[start]節點開始走,是否存在一條路徑走到終點nums[end], 而且 nums[end]值為0。


這邊以範例一的圖解幫助大家思考。

Example 1:

Input: arr = [4,2,3,0,3,1,2], start = 5

Output: true

Explanation:

All possible ways to reach at index 3 with value 0 are:

index 5 -> index 4 -> index 1 -> index 3

index 5 -> index 6 -> index 4 -> index 1 -> index 3

每個陣列格子點視為一個節點

陣列的值就代表指向另外兩個節點 i - nums[i] 和 i + nums[i]的指向邊。

畫成圖,就變成下方這個樣子。


起點是5,問我們能不能從5號節點走向終點,而且終點的節點值value = 0

raw-image

答案是可以,我們可以用DFS和BFS去做路徑搜索,最後有兩條路徑可以走到終點,終點是左下角的3號節點,節點值value=0。


綠色部分就是從起點start=5走向終點(節點值value=0)的路徑

ID 5 -> ID 4 -> ID 1 -> ID 3,節點值value = 0

raw-image


ID 5 -> ID 6 -> ID 4 -> ID 1 -> ID 3,節點值value = 0

raw-image

程式碼 DFS

class Solution:
def canReach(self, arr: List[int], start: int) -> bool:

# Base case aka stop condition

# Invalid index checking, or repeated traversal
if ( ( start < 0) or (start >= len(arr) ) or ( arr[ start ] == -1) ):
return False;


# Reach destination
if arr[ start ] == 0 :
return True;

# General cases:
offset = arr[ start ]

# mark as visited
arr[start] = -1

# search in DFS
return self.canReach(arr, start + offset ) or self.canReach( arr, start - offset )

複雜度分析 DFS 尋找路徑

令n=輸入陣列nums的長度 = 圖中的節點總數

時間複雜度:

從start拜訪整張圖,每個節點至多訪問一次,每個節點最多兩條向外的指向邊。

最後一定有結果,若有路徑回傳True,若無解則回傳False。


拜訪整張圖所需時間為O(n)。


空間複雜度:

從起點開始DFS遞迴搜索,每一層拜訪一個節點,最大深度為O(n)。


程式碼 BFS

class Solution:
def canReach(self, arr: List[int], start: int) -> bool:

if arr[start] == 0:
return True

n = len(arr)

# mark as visited
seen = {start}
bfs_q = deque([start])

while bfs_q:
u = bfs_q.popleft()
for next_node in [u + arr[u], u - arr[u]]:
if 0 <= next_node < n and next_node not in seen:
if arr[next_node] == 0:
return True

bfs_q.append(next_node)

# # mark as visited
seen.add(next_node)

return False


複雜度分析 BFS 尋找路徑

令n=輸入陣列nums的長度 = 圖中的節點總數

時間複雜度:

從start拜訪整張圖,每個節點至多訪問一次,每個節點最多兩條向外的指向邊。

最後一定有結果,若有路徑回傳True,若無解則回傳False。


拜訪整張圖所需時間為O(n)。


空間複雜度:

從起點開始BFS逐層搜索,先進先出拜訪一個節點,queue最大長度為O(n)。


關鍵知識點

把原本的題目映射到圖論上的找路徑問題

由從找路徑聯想到其實就是拜訪整張圖

拜訪整張圖想到圖論裡最泛用的DFS深度優先搜索 BFS廣度優先搜索


Reference:

[1] Jump Game III_Python O(n) by DFS

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 題目會給我們一個輸入陣列nums,每個元素值代表那個格子點可以跳躍的最大長度。 題目保證始從最左邊的格子點出發開始跳,一定可以成功抵達終點,請問最少跳躍次數是說少? 題目的原文敘述 測試範例 Example 1: Input: nums = [2,3,1,1,4] Outp
題目敘述 題目會給我們一個輸入陣列nums,每個元素值代表那個格子點可以跳躍的最大長度。 一開始從最左邊的格子點出發開始跳,請問可以成功抵達終點,也就是最右邊的格子點嗎? 如果可以,返回 True。 如果不行,返回False。 題目的原文敘述 測試範例 Example 1: In
題目敘述 題目會給我們一個房間陣列rooms,每個房間裡面擁有數量不等,可以打開其他房間的鑰匙。 每一道房間門預設都是鎖住的,只有0號房間的門一開始是打開的。 請問,從0號房間開始拿鑰匙,最終能不能打開所有房間的門? 題目的原文敘述 測試範例
題目敘述 題目會給我們一顆二元樹的根結點,請我們列出每一層最右邊的節點值,以陣列的形式返回答案。 題目的原文敘述 測試範例 Example 1: Input: root = [1,2,3,null,5,null,4] Output: [1,3,4] 每一層最右邊的節點值分別是1, 3,
題目敘述 題目會給定我們一個字串s,和一組字庫wordDict。 問我們能不能透過字串串接的方式,從字庫裡面的字拼成原本的字串s? 可以的話,返回True。 無解的話,返回False。 註: 題目還允許重複使用字庫裡面的字去串接。
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
題目敘述 題目會給我們一個輸入陣列nums,每個元素值代表那個格子點可以跳躍的最大長度。 題目保證始從最左邊的格子點出發開始跳,一定可以成功抵達終點,請問最少跳躍次數是說少? 題目的原文敘述 測試範例 Example 1: Input: nums = [2,3,1,1,4] Outp
題目敘述 題目會給我們一個輸入陣列nums,每個元素值代表那個格子點可以跳躍的最大長度。 一開始從最左邊的格子點出發開始跳,請問可以成功抵達終點,也就是最右邊的格子點嗎? 如果可以,返回 True。 如果不行,返回False。 題目的原文敘述 測試範例 Example 1: In
題目敘述 題目會給我們一個房間陣列rooms,每個房間裡面擁有數量不等,可以打開其他房間的鑰匙。 每一道房間門預設都是鎖住的,只有0號房間的門一開始是打開的。 請問,從0號房間開始拿鑰匙,最終能不能打開所有房間的門? 題目的原文敘述 測試範例
題目敘述 題目會給我們一顆二元樹的根結點,請我們列出每一層最右邊的節點值,以陣列的形式返回答案。 題目的原文敘述 測試範例 Example 1: Input: root = [1,2,3,null,5,null,4] Output: [1,3,4] 每一層最右邊的節點值分別是1, 3,
題目敘述 題目會給定我們一個字串s,和一組字庫wordDict。 問我們能不能透過字串串接的方式,從字庫裡面的字拼成原本的字串s? 可以的話,返回True。 無解的話,返回False。 註: 題目還允許重複使用字庫裡面的字去串接。
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
遊戲有教育意義並不罕見,但有教育意義之餘有趣而且是小品免費遊戲就很少見,由公視團隊打造的《青春網戀模擬器》就是其中一個例子。 在《青春網戀模擬器》,玩家將扮演一位15歲剛與男友分手的女高中生,經朋友介紹下開始玩交友軟體,途中認識到一位很合眼緣和很談得來的男生,兩人自自然然成為情侶,不過男生的要
Thumbnail
13號左右韓國的Krafton Inc.發布了新遊戲inZOI開發畫面 展現高自由度的開放世界 自定義裝修與捏臉系統 以及全方面模擬人生的遊戲內容   目前市面上同類型模擬遊戲 最受歡迎的就是Electronic Arts模擬市民The Sims系列作品 同樣以高自由度為特點加上能夠自
Thumbnail
感謝越來越多民眾關注「虛擬情人」議題,讓我的一系列相關文章獲得廣泛矚目,也陸續受邀前往國泰醫院精神科、臺北醫學大學健康資訊科技國際研究中心、雙和醫院、台大醫院精神部演講「虛擬情人」議題。 隨著越來越多民眾得知虛擬情人功能,接下來必須了解的就是大家心目中對它的「定位」。
Thumbnail
當我在遊玩時,大約95%的時間都是水柱和水聲陪伴著我。嗨,我是茶齋誌佑!2021年在Steam上市的《PowerWash Simulator 強力清潔模擬器》,今年1月於PS和NS平台上發售。原本我以為它只是個洗車、洗建築的輕鬆小品,沒想到它竟成了一款能洗滌我身心的遊戲。
Thumbnail
  由 A2 Softworks 與 Art Games Studio 合作開發的生存模擬冒險遊戲《攀登者:天空是極限(Climber: Sky is the Limit)》今(22)日於 PC 平台推出,官方同步釋出最新宣傳影片。
Thumbnail
筆者日前受邀參與財團法人資訊工業策進會舉辦的「數位分身與沙盒法制環境建構研析」專家座談會,發現新加坡與英國正在進行這樣的「數據模擬分析」專案計畫,實在很像電玩遊戲「模擬城市」(SimCity),其中衍生國家、城市乃至於個人的元宇宙與數位分身(Digital Twin),可應用於分析風險的高低、測試政
Thumbnail
本作為R18調酒師模擬遊戲,玩家將扮演魔王之子,來到人類社會經營酒館,可攻略的對象包含酒吧的店員龍娘、狐狸娘,以及酒客史萊姆娘、獸娘、聖女等等共15位女角,劇情有趣,內容相當豐富。
Thumbnail
《DINKUM》 獨立開發者 James Bendon 打造的模擬經營類型遊戲《真實人生(暫譯,原名:Dinkum)》,是一款讓玩家可以在灌木叢中建造新家園、自由展開新生活的模擬經營遊戲。玩家將在澳大利亞內陸的熱帶尤加利樹叢林盡情探索,探索充滿野生動物的景色,並透過狩獵、採礦、捕魚等收集寶貴資源以生
Bridge+創始人Andy在3年前剛好大學畢業,為了尋找到比較好的工作,他向學長姐多方打聽,了解不同工作的具體情況,在這個過程中他學到了很多,也發覺並不是所有的畢業生都會像他這樣這麼認真去思考、解決自己的職業問題,而是直接扎入職場,因此會碰到各種問題。
Thumbnail
抗疫期間要保持社交距離(Social Distancing),不能時常跟親朋好友見面的漫長日子該怎樣渡過呢?這時候,一份無人島的移居指南出現在廣大的電玩玩家眼前,任天堂 (Nintendo) Switch 的《集合啦!動物森友會》適時推出,成為自我隔離的心靈良藥。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
遊戲有教育意義並不罕見,但有教育意義之餘有趣而且是小品免費遊戲就很少見,由公視團隊打造的《青春網戀模擬器》就是其中一個例子。 在《青春網戀模擬器》,玩家將扮演一位15歲剛與男友分手的女高中生,經朋友介紹下開始玩交友軟體,途中認識到一位很合眼緣和很談得來的男生,兩人自自然然成為情侶,不過男生的要
Thumbnail
13號左右韓國的Krafton Inc.發布了新遊戲inZOI開發畫面 展現高自由度的開放世界 自定義裝修與捏臉系統 以及全方面模擬人生的遊戲內容   目前市面上同類型模擬遊戲 最受歡迎的就是Electronic Arts模擬市民The Sims系列作品 同樣以高自由度為特點加上能夠自
Thumbnail
感謝越來越多民眾關注「虛擬情人」議題,讓我的一系列相關文章獲得廣泛矚目,也陸續受邀前往國泰醫院精神科、臺北醫學大學健康資訊科技國際研究中心、雙和醫院、台大醫院精神部演講「虛擬情人」議題。 隨著越來越多民眾得知虛擬情人功能,接下來必須了解的就是大家心目中對它的「定位」。
Thumbnail
當我在遊玩時,大約95%的時間都是水柱和水聲陪伴著我。嗨,我是茶齋誌佑!2021年在Steam上市的《PowerWash Simulator 強力清潔模擬器》,今年1月於PS和NS平台上發售。原本我以為它只是個洗車、洗建築的輕鬆小品,沒想到它竟成了一款能洗滌我身心的遊戲。
Thumbnail
  由 A2 Softworks 與 Art Games Studio 合作開發的生存模擬冒險遊戲《攀登者:天空是極限(Climber: Sky is the Limit)》今(22)日於 PC 平台推出,官方同步釋出最新宣傳影片。
Thumbnail
筆者日前受邀參與財團法人資訊工業策進會舉辦的「數位分身與沙盒法制環境建構研析」專家座談會,發現新加坡與英國正在進行這樣的「數據模擬分析」專案計畫,實在很像電玩遊戲「模擬城市」(SimCity),其中衍生國家、城市乃至於個人的元宇宙與數位分身(Digital Twin),可應用於分析風險的高低、測試政
Thumbnail
本作為R18調酒師模擬遊戲,玩家將扮演魔王之子,來到人類社會經營酒館,可攻略的對象包含酒吧的店員龍娘、狐狸娘,以及酒客史萊姆娘、獸娘、聖女等等共15位女角,劇情有趣,內容相當豐富。
Thumbnail
《DINKUM》 獨立開發者 James Bendon 打造的模擬經營類型遊戲《真實人生(暫譯,原名:Dinkum)》,是一款讓玩家可以在灌木叢中建造新家園、自由展開新生活的模擬經營遊戲。玩家將在澳大利亞內陸的熱帶尤加利樹叢林盡情探索,探索充滿野生動物的景色,並透過狩獵、採礦、捕魚等收集寶貴資源以生
Bridge+創始人Andy在3年前剛好大學畢業,為了尋找到比較好的工作,他向學長姐多方打聽,了解不同工作的具體情況,在這個過程中他學到了很多,也發覺並不是所有的畢業生都會像他這樣這麼認真去思考、解決自己的職業問題,而是直接扎入職場,因此會碰到各種問題。
Thumbnail
抗疫期間要保持社交距離(Social Distancing),不能時常跟親朋好友見面的漫長日子該怎樣渡過呢?這時候,一份無人島的移居指南出現在廣大的電玩玩家眼前,任天堂 (Nintendo) Switch 的《集合啦!動物森友會》適時推出,成為自我隔離的心靈良藥。