// C++ Program: Longest Subarray with Sum = K using Prefix Sum + Hash Map
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int longestSubarrayWithSumK(vector<int>& nums, int k) {
unordered_map<int, int> prefixMap; // prefixSum -> firstIndex
int maxLen = 0, currSum = 0;
for (int i = 0; i < [Link](); i++) {
currSum += nums[i];
// If prefix sum equals k
if (currSum == k) {
maxLen = i + 1;
}
// If (currSum - k) is found in map
if ([Link](currSum - k) != [Link]()) {
int len = i - prefixMap[currSum - k];
maxLen = max(maxLen, len);
}
// Store only first occurrence of prefix sum
if ([Link](currSum) == [Link]()) {
prefixMap[currSum] = i;
}
}
return maxLen;
}
int main() {
vector<int> arr = {1, 2, 3, -1, 1, 4};
int k = 10;
int result = longestSubarrayWithSumK(arr, k);
cout << "Length of the longest subarray: " << result << endl;
return 0;
}