和等于K的子数组
和等于K的子数组
问题描述
给定一个整数数组,返回子数组的个数,这些子数组的和为K。
解决方案
法一:可以使用DP来解决,因为dp[i][j] = dp[0][j] - dp[0][i],其中dp表示下标i+1到下标i之间的和。这种算法的时间复杂度为$O(n^2)$。
法二:采用字典(Map)才存储每个值出现的次数
这种方法只需要经历一次遍历,问题的核心是求sum[i][j] == k,而根据公式sum[i][j] = sum[0][i] + sum[0][j]可知,如果把 j 作为遍历的指针,而把sum[0][i]存储在字典中,那么当sum[0][j] - k = sum[0][i]时,我们就找到了结果,并且结果的个数取决于字典中键等于sum[0][i]的个数。
1 |
|
和等于K的子数组
http://example.com/2023/01/10/和等于K的子数组/