import java.util.HashMap;
public class MyClass {
static int maxSubArrayLenEqualsToK(int[] arr, int k) {
int current = 0, len = 0;
HashMap<Integer, Integer> hmap = new HashMap<>();
int size = arr.length;
for (int i = 0; i < size; i++) {
current += arr[i];
if (current == k) {
len = i + 1;
}
else if (hmap.containsKey(current - k)) {
len = Math.max(len, i - hmap.get(current - k));
}
if (!hmap.containsKey(current)) {
hmap.put(current, i);
}
}
return len;
}
public static void main(String args[]) {
int[] arr = {1, -1, 5, -2, -3, 2, 3, 3};
int K = 3;
// 1, -1, 5, -2 = 3 (4)
// 5, -2 = 3 (2)
// -2, -3, 2, 3, 3 = 3 (5)
System.out.print(maxSubArrayLenEqualsToK(arr, K));
}
}
/*
run:
5
*/