import java.util.HashMap;
import java.util.Map;
public class Main {
public static int[] largestSubarraySumK(int[] nums, int k) {
Map
<Integer, Integer
> mp
= new HashMap
<>(); mp.put(0, -1); // Imaginary index -1 for sum 0.
int currentSum = 0;
int maxLen = 0;
int[] result = {-1, -1};
for (int j = 0; j < nums.length; j++) {
currentSum += nums[j];
if (mp.containsKey(currentSum - k)) {
int length = j - mp.get(currentSum - k);
if (length > maxLen) {
maxLen = length;
result[0] = mp.get(currentSum - k) + 1;
result[1] = j;
}
}
if (!mp.containsKey(currentSum)) {
mp.put(currentSum, j);
}
}
return result;
}
public static void main
(String[] args
) { int[] nums = {1, 2, 3, 4, 5, -1, -4};
int k = 9;
int[] result = largestSubarraySumK(nums, k);
if (result[0] != -1) {
System.
out.
println("Largest subarray with sum " + k
+ " is from index " + result
[0] + " to " + result
[1]); } else {
System.
out.
println("No subarray with sum " + k
); }
}
}
aW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcDsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCiAgICBwdWJsaWMgc3RhdGljIGludFtdIGxhcmdlc3RTdWJhcnJheVN1bUsoaW50W10gbnVtcywgaW50IGspIHsKICAgICAgICBNYXA8SW50ZWdlciwgSW50ZWdlcj4gbXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgbXAucHV0KDAsIC0xKTsgLy8gSW1hZ2luYXJ5IGluZGV4IC0xIGZvciBzdW0gMC4KICAgICAgICBpbnQgY3VycmVudFN1bSA9IDA7CiAgICAgICAgaW50IG1heExlbiA9IDA7CiAgICAgICAgaW50W10gcmVzdWx0ID0gey0xLCAtMX07CgogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICBjdXJyZW50U3VtICs9IG51bXNbal07CgogICAgICAgICAgICBpZiAobXAuY29udGFpbnNLZXkoY3VycmVudFN1bSAtIGspKSB7CiAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gaiAtIG1wLmdldChjdXJyZW50U3VtIC0gayk7CiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gbWF4TGVuKSB7CiAgICAgICAgICAgICAgICAgICAgbWF4TGVuID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IG1wLmdldChjdXJyZW50U3VtIC0gaykgKyAxOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IGo7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghbXAuY29udGFpbnNLZXkoY3VycmVudFN1bSkpIHsKICAgICAgICAgICAgICAgIG1wLnB1dChjdXJyZW50U3VtLCBqKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W10gbnVtcyA9IHsxLCAyLCAzLCA0LCA1LCAtMSwgLTR9OwogICAgICAgIGludCBrID0gOTsKICAgICAgICBpbnRbXSByZXN1bHQgPSBsYXJnZXN0U3ViYXJyYXlTdW1LKG51bXMsIGspOwogICAgICAgIGlmIChyZXN1bHRbMF0gIT0gLTEpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMYXJnZXN0IHN1YmFycmF5IHdpdGggc3VtICIgKyBrICsgIiBpcyBmcm9tIGluZGV4ICIgKyByZXN1bHRbMF0gKyAiIHRvICIgKyByZXN1bHRbMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gc3ViYXJyYXkgd2l0aCBzdW0gIiArIGspOwogICAgICAgIH0KICAgIH0KfQ==