How to find the maximum length of a subarray having a sum equal to K in C++

1 Answer

0 votes
#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

*/

 



answered Feb 23, 2024 by avibootz
edited Feb 23, 2024 by avibootz
...