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