java 最大连续和圆形阵列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 最大连续和圆形阵列相关的知识,希望对你有一定的参考价值。
import java.util.*;
public class MaxContinuousSumCiricularArray {
public static void main(String args[]) {
MaxContinuousSumCiricularArray maxContinuousSum = new MaxContinuousSumCiricularArray();
int[][] input = {
null,
{},
{1},
{2,1,-5,4,-3,1,-3,4,-1},
{-3,1,-3,4,-1,2,1,-5,4},
{-2,1,-3,4,-1,2,1,-5,4},
{8,-7,-3,5,6,-2,3,-4,2},
{3,5,8,4,5,9,10,8,5,3,4},
{-8,-3,-6,-2,-5,-4},
{1,2,3,4,5},
{5,4,3,2,1}
};
for(int i=0; i< input.length; i++) {
System.out.println("Input: " + Arrays.toString(input[i]) + " Result: " + maxContinuousSum.find(input[i]));
}
}
private int find(int[] input){
if(input == null || input.length < 1) {
return -1;
}
for(int i=0; i<input.length;i++){
input[i] = -input[i];
}
int negMaxContinousSum = findMaxContinousSum(input);
for(int i=0; i<input.length;i++){
input[i] = -input[i];
}
int actualNegMax = Arrays.stream(input).sum() + negMaxContinousSum;
int maxContinouSum = findMaxContinousSum(input);
//when all numbers are negative
if(actualNegMax == 0) {
return maxContinouSum;
}
return Math.max(maxContinouSum, Arrays.stream(input).sum() + negMaxContinousSum);
}
private int findMaxContinousSum(int[] input) {
int maxSoFar = input[0];
int currentMax = input[0];
for(int i=1; i< input.length; i++) {
currentMax += input[i];
if(currentMax < input[i]) {
currentMax = input[i];
}
maxSoFar = Math.max(currentMax, maxSoFar);
}
return maxSoFar;
}
}
以上是关于java 最大连续和圆形阵列的主要内容,如果未能解决你的问题,请参考以下文章
最大子阵列/连续数组的最大和
c_cpp 最大子阵列总和。在具有最大总和的数组(包含至少一个数字)中查找连续的子数组。
最大子阵列和
java 523.连续子阵列总和(Pigeonhole).java
java 523.连续子阵列总和(Pigeonhole).java
java 523.连续子阵列总和(Pigeonhole).java