我是靠谱客的博主 机智舞蹈,最近开发中收集的这篇文章主要介绍连续子元素最大和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

n^2解法


/**
* 1. 如果有连续的正数,那么只要考虑第一个。因为假设某个子串的和是最大的,但这个子串首位前一个是个正数,
* 那么这个子串加上这个正数形成的子串和会更大,产生了矛盾,因此假设不成立。
* 2. 所以最大和的子串前一位必为负数(0、或没有数)
*/
int arr[] = {8, -2, 5, 1, -4, 7, 6, -9, 1, 13};
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 0 && i > 0 && arr[i - 1] < 0 || arr[i] > 0) {
int sum = 0;
for (int j = i; j < arr.length; j++) {
sum += arr[j];
if (sum > max) {
max = sum;
}
}
}
}
System.out.println(max);

n解法(动态规划)

状态转移方程为:
MaxSum[i] = Max{ MaxSum[i-1] + A[i], A[i]}
MaxSum[i]表示下标为i及以前的序列中的连续子元素最大和
A[i]表示下标为i的元素值

int MaxSubSequence(int A[], int N) {
int ThisSum, MaxSum, j;
ThisSum = MaxSum = 0;
for (j = 0; j < N; j++) {
ThisSum += A[j];
if (ThisSum > MaxSum)
MaxSum = ThisSum;
else if (ThisSum < 0)
// 相当于前面就是一个负数了,所以舍弃(解法一第二点规则)
ThisSum = 0;
}
return MaxSum;
}

转载于:https://www.cnblogs.com/zyoung/p/6724462.html

最后

以上就是机智舞蹈为你收集整理的连续子元素最大和的全部内容,希望文章能够帮你解决连续子元素最大和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部