贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
引用自代码随想录
每一阶段的局部最优就是到当前位置的最大升序子数组之和。
全局最优就是到数组尾时的最大升序子数组之和。
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;
}
}