#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
*/