代码随想录算法训练营29期|day32 任务以及具体安排

第八章 贪心算法 part02

  •  122.买卖股票的最佳时机II 代码随想录算法训练营29期|day32 任务以及具体安排_第1张图片
    // 贪心思路
    class Solution {
        public int maxProfit(int[] prices) {
            int result = 0;
            for (int i = 1; i < prices.length; i++) {
                result += Math.max(prices[i] - prices[i - 1], 0);
            }
            return result;
        }
    }

    思路:将股票问题抽象为每天买卖的情况,两天之间只要有钱赚,就买入卖出,达到局部最优的情况。

  •  55. 跳跃游戏 代码随想录算法训练营29期|day32 任务以及具体安排_第2张图片
    class Solution {
        public boolean canJump(int[] nums) {
            if (nums.length == 1) {
                return true;
            }
            //覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的
            int coverRange = 0;
            //在覆盖范围内更新最大的覆盖范围
            for (int i = 0; i <= coverRange; i++) {
                coverRange = Math.max(coverRange, i + nums[i]);
                if (coverRange >= nums.length - 1) {
                    return true;
                }
            }
            return false;
        }
    }

    思路:更新覆盖范围,如果覆盖范围>=最后一个点的位置,就return true,注意!!!!要在覆盖范围内更新,最典型的例子:0  1  1  1  1这种情况肯定到不了最后

  •  45.跳跃游戏II 代码随想录算法训练营29期|day32 任务以及具体安排_第3张图片
    // 版本一
    class Solution {
        public int jump(int[] nums) {
            if (nums == null || nums.length == 0 || nums.length == 1) {
                return 0;
            }
            //记录跳跃的次数
            int count=0;
            //当前的覆盖最大区域
            int curDistance = 0;
            //最大的覆盖区域
            int maxDistance = 0;
            for (int i = 0; i < nums.length; i++) {
                //在可覆盖区域内更新最大的覆盖区域
                maxDistance = Math.max(maxDistance,i+nums[i]);
                //说明当前一步,再跳一步就到达了末尾
                if (maxDistance>=nums.length-1){
                    count++;
                    break;
                }
                //走到当前覆盖的最大区域时,更新下一步可达的最大区域
                if (i==curDistance){
                    curDistance = maxDistance;
                    count++;
                }
            }
            return count;
        }
    }

    思路:走到当前覆盖的最大区域时,走一步然后更新为当前最大覆盖范围。如果当前最大覆盖范围已经覆盖最后一个数时,就走一步,到达最后一个数。

你可能感兴趣的:(算法,leetcode,java,数据结构,代码随想录,贪心算法)