fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6.  
  7.  
  8. if (!sc.hasNextInt()) return;
  9. int n = sc.nextInt();
  10.  
  11.  
  12. int[] arr = new int[n];
  13. for (int i = 0; i < n; i++) {
  14. arr[i] = sc.nextInt();
  15. }
  16.  
  17.  
  18. int result = maxLength(arr);
  19.  
  20.  
  21. System.out.println(result);
  22. }
  23.  
  24. public static int maxLength(int arr[]) {
  25. Map<Integer, Integer> map = new HashMap<>();
  26. int n = arr.length;
  27. int sum = 0;
  28. int[] prefixSum = new int[n];
  29.  
  30. for (int i = 0; i < n; i++) {
  31. sum += arr[i];
  32. prefixSum[i] = sum;
  33. }
  34.  
  35. int maxLongestSubArray = 0;
  36. for (int i = 0; i < n; i++) {
  37. int num = prefixSum[i];
  38.  
  39. if (num == 0) {
  40. maxLongestSubArray = Math.max(maxLongestSubArray, i + 1);
  41. }
  42.  
  43. if (map.containsKey(num)) {
  44. int currentLongestSubArray = i - map.get(num);
  45. maxLongestSubArray = Math.max(currentLongestSubArray, maxLongestSubArray);
  46. } else {
  47. map.put(num, i);
  48. }
  49. }
  50.  
  51. return maxLongestSubArray;
  52. }
  53. }
  54.  
Success #stdin #stdout 0.1s 54512KB
stdin
Standard input is empty
stdout
Standard output is empty