java 找到具有给定总和的最大长度子阵列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 找到具有给定总和的最大长度子阵列相关的知识,希望对你有一定的参考价值。

import java.util.*;
import java.math.*;
public class MaxLenSubArrayWithSum {
    public static void main(String args[]) {
        MaxLenSubArrayWithSum subArrayWithSum = new MaxLenSubArrayWithSum();
        
        int[][] input = {
          null,
          {},
          {8},
          {5,6,-5,5,3,5,3,-2,0}, 
          {1,2,5,-4}
        };
        int maxSum = 8;
        for(int i=0; i< input.length; i++) {
            System.out.println("Input: " + Arrays.toString(input[i]) + ", Result: " + subArrayWithSum.maxSubArray(input[i], maxSum));
        }
    }
    
    public List<Integer> maxSubArray(int[] input, int sum) {
        if(input == null || input.length <= 0) {
            return null;
        }
        
        int maxLen = 0;
        int start = 0;
        int end = 0;
        Map<Integer, Integer> sumIndexTracker = new HashMap<>();
        sumIndexTracker.put(0,-1);
        
        int currentSum = 0;
        for (int i=0; i < input.length; i++) {
            currentSum += input[i];
            if(!sumIndexTracker.containsKey(currentSum)) {
                sumIndexTracker.put(currentSum, i);
            }
            if(sumIndexTracker.containsKey(currentSum-sum) && maxLen < (i - sumIndexTracker.get(currentSum-sum)) ) {
                start = sumIndexTracker.get(currentSum-sum) + 1;
                end = i;
                maxLen = end - start +1;
            }
        } 
        return extract(input, start, end);
    }
    
    private List<Integer> extract(int[] input, int start, int end) {
        List<Integer> extract = new ArrayList<>();
        for(int i=start; i<= end; i++) {
            extract.add(input[i]);
        }
        return extract;
    }
    
    
}

以上是关于java 找到具有给定总和的最大长度子阵列的主要内容,如果未能解决你的问题,请参考以下文章

给定一个数组和一个总和,找到小于总和的最大长度连续子数组

c_cpp 最大子阵列总和。在具有最大总和的数组(包含至少一个数字)中查找连续的子数组。

java 得到最大总和的子阵列

java 最大子阵列总和

最大子阵列和

javascript 给定总和的子阵列