import
java.util.HashMap;
import
java.util.Map;
public
class
Main {
public
static
int
LongestSubarraySum(
int
[] arr,
int
K) {
int
n = arr.length;
Map<Integer, Integer> prefixSum =
new
HashMap<>();
int
currSum =
0
;
int
maxLen =
0
;
for
(
int
i =
0
; i < n; i++) {
currSum += arr[i];
if
(prefixSum.containsKey(currSum - K)) {
maxLen = Math.max(maxLen, i - prefixSum.get(currSum - K));
}
if
(!prefixSum.containsKey(currSum)) {
prefixSum.put(currSum, i);
}
}
return
maxLen;
}
public
static
void
main(String[] args) {
int
[] arr1 = {
2
,
3
,
4
,
2
,
1
,
1
};
int
K1 =
10
;
System.out.print(
"Longest subarray length with sum "
+ K1 +
" in ["
);
for
(
int
i =
0
; i < arr1.length; i++) {
System.out.print(arr1[i]);
if
(i < arr1.length -
1
) {
System.out.print(
", "
);
}
}
System.out.println(
"] is: "
+ LongestSubarraySum(arr1, K1));
int
[] arr2 = {
6
,
8
,
14
,
9
,
4
,
11
,
10
};
int
K2 =
13
;
System.out.print(
"Longest subarray length with sum "
+ K2 +
" in ["
);
for
(
int
i =
0
; i < arr2.length; i++) {
System.out.print(arr2[i]);
if
(i < arr2.length -
1
) {
System.out.print(
", "
);
}
}
System.out.println(
"] is: "
+ LongestSubarraySum(arr2, K2));
}
}