100天程式碼提升計劃-第26天
阿新 • • 發佈:2022-04-01
✅做題思路or感想
這一題說是用貪心,我個人更傾向於是腦筋急轉彎or單純考察思維
這一題的大忌就是模擬一個人從初始點一個個跳格子,很容易把自己繞進去
這類題的真正思路應該是計算可跳的覆蓋範圍
如果可跳的覆蓋範圍覆蓋了終點,則說明可以跳到終點
如果迴圈遍歷結束了,覆蓋範圍都沒有覆蓋到終點,則說明不可言跳到終點
而此題關鍵的步驟是:每移動一個單位,就更新最大覆蓋範圍
class Solution { public: bool canJump(vector<int>& nums) { if (nums.size() == 1)return true; //防止奇怪的測試用例 int cover = nums[0]; //從起點開始跳,所以開始的覆蓋範圍是由起點而定 for (int i = 0; i <= cover; i++) { //更新最大覆蓋範圍 cover = max(cover, nums[i] + i); //覆蓋了終點,則return true if (cover >= nums.size() - 1)return true; } //都遍歷完了還沒覆蓋,則return false return false; } };
這一題有一個讓我百思不得其解的一個疑問:如果把上面的max函式改成三目運算子,則執行速度會翻倍,但是在前幾題中用三目運算子時,執行效率又是優於max函式,真的是很奇怪了