求子数组和值最大的两种方法

本文介绍两种求解子数组最大和的方法:动态规划法和简化版算法,并提供Java实现代码。通过实例展示如何找到给定数组中具有最大和的连续子数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个数组,求其子数组,使得子数组的元素之和最大。


方法一:利用DP动态规划

java源代码如下:

	public int maxSubArray1(int[] A) {
		int max = A[0];
		int[] sum = new int[A.length];
		sum[0] = A[0];
 
		for (int i = 1; i < A.length; i++) {
			sum[i] = Math.max(A[i], sum[i - 1] + A[i]);
			max = Math.max(max, sum[i]);
		}
 
		return max;
	}


方法二:更简单

java源代码如下:

	public int maxSubArray2(int[] A) {
		int newsum = A[0];
		int max = A[0];
		for (int i = 1; i < A.length; i++) {
			newsum = Math.max(newsum + A[i], A[i]);
			max = Math.max(max, newsum);
		}
		return max;
	}


main函数如下:

<pre name="code" class="java">	public static void main(String[] ars) {
		int[] a = { -2, 1, -3, 4, -1, 2, 1, -5, 4};
		MaxSubArray array = new MaxSubArray();
		int max = array.maxSubArray1(a);
//		int max = array.maxSubArray2(a);
		System.out.println(max);
	}


运行结果如下:

6

参考文章:

1、http://www.programcreek.com/2013/02/leetcode-maximum-subarray-java/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值