給定一個數組arr,給定一個數target。求,各個元素之和等於target的連續子數組的個數,時間復雜度為O(N),空間復雜度也為O(N)
借助一個Map即可實現。Map中保存的是:從arr的最左側元素(也就是下標為0的元素)開始,到當前位置為止,所有元素的和出現的次數。
1 private int getNumOfSubThatSumIsTarget(int[] arr, int target) { 2 Map<Integer, Integer> map = new HashMap<>(); 3 map.put(0, 1); 4 5 int result = 0; 6 int curSum = 0; 7 for (int i = 0; i < arr.length; ++i) { 8 curSum += arr[i]; 9 10 result += map.getOrDefault(curSum - target, 0); 11 12 map.put(curSum, map.getOrDefault(curSum, 0) + 1); 13 } 14 15 return result; 16 }