力扣習題 跳躍遊戲

2021-10-23 10:56:06 字數 709 閱讀 8608

自己的解法:

class solution 

ret[k + m] = true;}}

if (ret.back())

}return ret.back();

}};

思路就是用乙個陣列來儲存每個位置的可達性,不斷更新,如果乙個位置可達,那麼它的後nums[k]個位置都可達。直到得到最後乙個位置。這樣一來,時間複雜度為o(n2),空間複雜度o(n)

但是事實上,只要明白如果乙個位置可達,那麼它前面的位置都可達,就不用陣列來記錄每個位置了,只需要知道每個位置最遠能到達哪個位置就可以了,就可以在時間複雜度o(n),空間複雜度o(1)完成演算法。

下面解釋為什麼如果乙個位置可達,那麼它前面的位置都可達。

假定乙個序列......a...b....,a不可達,b可達。

那麼b可達必定是由a前面某個位置c到達,或者a後面某個位置d到達,即

......c..a...d....b......,其中a不可達,bcd可達。

如果b是從c的位置可達,那麼必然a也可達,矛盾。

如果是從d到達b,那麼問題又回到了前面,即b換成了d。

那麼最終就演變成了這樣的問題

.......ab....,a不可達,b可達

顯然不可能,因為b必然由a前面某個位置到達,那麼a也必然可達,因此矛盾。

因此不可能出現某個位置可到,但其前面存在位置不可達的情況。

力扣Leetcode 55 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。輸入 3,2,1,0,4...

力扣演算法題 045跳躍遊戲二

1 include 000庫函式.h 2 34 考慮當前最遠能到什麼地方,例如2,3,1,1,4,5 首先只考慮a 0 2,即最遠可以到a 2 然後從1到2中找下乙個可到的最遠點,6 即a 1 可以到達a 4 此時找到結果,步數記錄為2。若接著考慮,7 下一次應該從3 4裡面找乙個最遠即a 4 可達...

力扣刷題(45 跳躍遊戲II)

題目直接截圖於力扣 leetcode 該題 我才發現英文版的題目他給出了約束條件,而中文貌似沒有。吃了偷懶的虧,以後還是看英文吧,順帶還能學習一下英語。ovo 下面是英文題目 下面是中文題目 貪心演算法 並不是所有的貪心策略都能得到想要的最優解。此道題中,自然是每次跳躍都能夠到達最優點,使得本次跳躍...