本题难度并不高,但是有点难想到,理解之后就非常简单了。
    核心算法:

    • 构建一个HashMap<Integer, Integer>key, value是出现的次数。
    • 这个想法的最大阻碍是以为要算所有的subarray,这样复杂度就变成了560. Subarray Sum Equals K - 图1,其实不用!!只需要计算从0开始的即可,找到sum,和sum-k即可.
      1. class Solution {
      2. public int subarraySum(int[] nums, int k) {
      3. if (nums == null || nums.length == 0) {
      4. throw new IllegalArgumentException("Invalid Input");
      5. }
      6. int sum = 0;
      7. Map<Integer, Integer> map = new HashMap<>();
      8. map.put(0, 1);
      9. int count = 0;
      10. for (int i = 0; i < nums.length; ++i) {
      11. sum += nums[i];
      12. if (map.containsKey(sum - k)) {
      13. count += map.get(sum - k);
      14. }
      15. if (map.containsKey(sum)) {
      16. map.put(sum, map.get(sum) + 1);
      17. }
      18. else {
      19. map.put(sum, 1);
      20. }
      21. }
      22. return count;
      23. }
      24. }