1. 程式人生 > 其它 >100天程式碼提升計劃-第26天

100天程式碼提升計劃-第26天

✅做題思路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函式,真的是很奇怪了