121、55、45

121

这道题的思路是贪心:题目的意思是只买卖一次股票,买卖不能是同一天。遍历过程中更新买入价格的最小值、利润的最大值,这样就可以保证卖出一定是在买入后面。

55

这道题的思路是不断更新能到达的最长范围,如果最长范围大于等于数组长度,那么就可以到达终点,否则不能。在每一个点处如何去更新最长范围?用len当作最长范围,一开始len是当前节点的值。以len作为for循环的终止条件,这个len可以在便利的时候不断更新。

class Solution {

public:

    bool canJump(vector<int>& nums) {

        int len=0;

        for(int i=0;i<=len;i++)

        {

            len=max(len,nums[i]+i);

            if(len>=nums.size()-1) return true;

        }

        return false;

    }

};

45

这道题的思路是为了获得最少的跳跃步数,每一步都跳的最大,每一步最大又是由上一步在它的范围内遍历得到。

class Solution {

public:

    int jump(vector<int>& nums) {

        int ans=0;

        int current=0;

        int next=0;

        if (nums.size() == 1) return 0;

        for(int i=0;i<nums.size();i++)

        {

            next=max(next,nums[i]+i);

            if(i==current)

            {

                ans++;

                current=next;

                if(next>=nums.size()-1) break;

            }

        }

        return ans;

    }

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容