fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. using namespace std;
  5.  
  6. int maxLength(vector<int>& arr) {
  7. int n = arr.size();
  8.  
  9. // prefixSum -> first index
  10. unordered_map<int, int> firstSeen;
  11. int prefixSum = 0;
  12. int maxLen = 0;
  13.  
  14. // insert prefix sum 0 at index -1
  15. // to handle sum from start
  16. firstSeen[0] = -1;
  17.  
  18. for (int i = 0; i < n; i++) {
  19. prefixSum += arr[i];
  20.  
  21. // prefix sum has been seen before
  22. if (firstSeen.find(prefixSum) != firstSeen.end()) {
  23. int prevIndex = firstSeen[prefixSum];
  24. int length = i - prevIndex;
  25. maxLen = max(maxLen, length);
  26. }
  27. else {
  28.  
  29. // Store first occurrence of this prefix sum
  30. firstSeen[prefixSum] = i;
  31. }
  32. }
  33.  
  34. return maxLen;
  35. }
  36.  
  37. int main() {
  38. vector<int> arr = {15, -2, 2, -8, 1, 7, 10};
  39. cout << maxLength(arr) << endl;
  40. return 0;
  41. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
5