题目考察的知识点是:
哈希表。
题目解答方法的文字分析:
对于连续子数组的和我们可以拆分成两段前缀和的差。因此从前向后遍历,一边维护前缀和,一边用哈希表记录每个前缀和对应的末尾元素的位置,特别的开头一段可以认为用一个空数组,末尾位置是-1。
本题解析所用的编程语言:
java语言。
完整且正确的编程代码:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param k int整型
* @return int整型二维数组
*/
public int[][] subarraySum (int[] nums, int k) {
// write code here
List<int[]> list = new ArrayList<>();
HashSet<String> set = new HashSet<>();
int n = nums.length;
for (int l = 0; l < n; l++) {
int sum = 0;
for (int r = l; r < n; r++) {
sum += nums[r];
if (sum == k) {
int[] temp = new int[r - l + 1];
System.arraycopy(nums, l, temp, 0, r - l + 1);
if (!set.contains(Arrays.toString(temp))) {
list.add(temp);
set.add(Arrays.toString(temp));
}
}
}
}
return list.toArray(new int[0][0]);
}
}

京公网安备 11010502036488号