package suanfa.array;

import java.util.ArrayList;
import java.util.List;

/**

  • 给定一个无序数组arr, 其中元素可正、可负、可0。给定一个整数k,求arr所有子数组中累加和为k的最长子数组长度

  • /
    public class MaxlenEqualK {
    public static void main(String[] args) {

      int[] arr = new int[]{1, -2, 1, 1, 1};
      int k = 0;
    
      int result = maxlenEqualK(arr, k);

    }

    public static int maxlenEqualK(int[] arr, int k) {

      int maxLength = 0;
    
      for (int left = 0; left < arr.length; left++) {
    
          if (maxLength > arr.length - left) {
              break;
          }
          List<Integer> list = new ArrayList<>();
          list.add(left);
          int tmp = arr[left];
          int right = left + 1;
          while (right < arr.length) {
              list.add(right);
              tmp += arr[right];
              if (tmp == k) {
                  maxLength = Math.max(maxLength, list.size());
              }
              right++;
          }
    
      }
    
      return maxLength;

    }
    }