最小序列和问题的几种解法 --贪心+动态规划+分治法

本文详细介绍了如何解决最小序列和问题,分别使用贪心算法、动态规划和分治法进行求解,并提供了完整的Java实现代码。通过维护序列和与最大值的动态关系,找到最大化序列和的策略。
摘要由CSDN通过智能技术生成

问题

在这里插入图片描述

解决方案

1.贪心算法

思路

维护一个当前序列和变量,如果这个变量小于零,就丢弃这个变量,重新初始化为零,重新从当前索引计算序列和。每次计算之后都要与最大值进行比较。

算法步骤

  • 参数初始化
    • 当前序列和 : 初始化为零
    • 最大序列和 : 初始化为最小整数(Integer.MIN_VALUE)
  • 遍历数组
    • 判断当前序列和是否需要重置
    • 序列和与当前索引处元素值相加
    • 判断当前序列和与最大值的大小关系
  • 返回最大值

完整代码

public int maxSubArray(int[] nums){
   
	int cur_sum = 0;
	int max_sum = Integer.MIN_VALUE;
	for(int i=0;i<nums.length;i++){
   
		if(cur_sum < 0)
			cur_sum = 0;
		cur_sum+=nums[i];
		if(max_sum < cur_sum)
			max_sum = cur_sum;
	}
	return max_sum;
}

2.动态规划

思路

要得到最大序列和,可以求出以每个元素为终点的最大序列和,然后取最大值。计算以当前元素为终点的序列和,只用判断上一个元素的最大序列和是否大于零,如果大于,就加在当前元素上,组成当前元素的最大序列和,如果小于或等于,则当前元素值就为最大序列和。

算法步骤

-参数初始化
序列和最大值:初始化为最小的整数(Integer.MIN_VALUE)

  • 迭代 <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值