贪心算法总结

贪心算法

  • 什么是贪心算法
  • 题目汇总
    • 1800. 最大升序子数组和

什么是贪心算法

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
引用自代码随想录

题目汇总

1800. 最大升序子数组和

每一阶段的局部最优就是到当前位置的最大升序子数组之和。
全局最优就是到数组尾时的最大升序子数组之和。

class Solution {
    public int maxAscendingSum(int[] nums) {
        int size = nums.length;
        int total = 0;
        int res = nums[0];

        for(int i = 1; i < size; i++){
            total = nums[i-1];
            // 贪心的获取能得到的最大值
            while(i < size && nums[i] > nums[i-1]){
                total += nums[i];
                res = Math.max(total, res);
                i++;
            }  
        }

        return res;
    }
}

你可能感兴趣的:(贪心算法,算法)