java 具有给定总和的子数组

Posted

tags:

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

import java.util.*;
public class SubArrayWithSum {
    class Pair{
        int start;
        int end;
        Pair(int start, int end) {
            this.start = start;
            this.end = end;
        }
        int length(){
            return end - start;
        }
        public String toString(){
            return "[" + start + "," + end + "]";
        }
    }
    public static void main(String args[]) {
        SubArrayWithSum subArrayWithSum = new SubArrayWithSum();
        int[][] input = {
          null,
          {},
          {1},
          {2,6,0,9,7,3,1,4,1,10},
          {0,5,-7,1,-4,7,6,1,4,19}
        };
        
        for(int i=0; i< input.length; i++) {
            int sum = 15;
            System.out.println("Input: " + Arrays.toString(input[i]) + ", sum=" + sum +" Result: " + subArrayWithSum.find(input[i], sum));
            sum = -3;
            System.out.println("Input: " + Arrays.toString(input[i]) + ", sum=" + sum +" Result: " + subArrayWithSum.find(input[i], sum));
        }
    }
    public Pair find(int[] input, int sum) {
        if(input == null || input.length < 1){
            return null;
        }
        
        int windowSum = 0;
        int start = 0;
        int end = 0;
        
        for(start=0;start<input.length;start++){
            while(windowSum < sum && end < input.length){
                windowSum += input[end++];
            }
            if(windowSum == sum) {
                return new Pair(start, end-1);
            }
            windowSum -= input[start];
        }
        
        return null;
    }
}

以上是关于java 具有给定总和的子数组的主要内容,如果未能解决你的问题,请参考以下文章

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

数字总和可被 K 整除的子数组的数量

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

如何在 O(nlogn) 中找到总和最接近零或某个值 t 的子数组

计算具有给定总和的子集的有效方法

Leetcode523. 连续的子数组和