package LeetCode_560 /** * 560. Subarray Sum Equals K * https://leetcode.com/problems/subarray-sum-equals-k/description/ * * Given an array of integers and an integer k, * you need to find the total number of continuous subarrays whose sum equals to k. Example 1: Input:nums = [1,1,1], k = 2 Output: 2 * */ class Solution { fun subarraySum(nums: IntArray, k: Int): Int { var result = 0 val n = nums.size //method 1: O(n*n) /*for (i in 0 until n) { var num = nums[i] if (num == k) { result++ } for (j in i + 1 until n) { num += nums[j] if (num == k) { result++ } } }*/ //method 2: Time Complexity: O(n), Space Complexity: O(n) val map = HashMap<Int, Int>() //key:prefixSum value //value:number of occurence of the prefixSum value。 map.put(0,1) var prefixSum = 0 for (num in nums) { prefixSum += num result += map.getOrDefault(prefixSum - k, 0) map.put(prefixSum, map.getOrDefault(prefixSum, 0) + 1) } return result } }