#include <unordered_map>
#include <iostream>
#include <vector>
int maxSubArrayLenEqualsToK(std::vector<int> &vec, int k) {
int current = 0, len = 0;
std::unordered_map<int, int> umap;
int size = vec.size();
for (int i = 0; i < size; i++) {
current += vec[i];
if (current == k) {
len = i + 1;
}
else if (umap.find(current - k) != umap.end()) {
len = std::max(len, i - umap[current - k]);
}
if (umap.find(current) == umap.end()) {
umap.emplace(current, i);
}
}
return len;
}
int main()
{
std::vector<int> vec = {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)
std::cout << maxSubArrayLenEqualsToK(vec, K);
}
/*
run:
5
*/