题解 | #子群的标签和#
子群的标签和
https://www.nowcoder.com/practice/4058a95b317f4f0e87e5a1bfa6db9aad
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param k int整型
* @return int整型二维数组
*/
public int[][] subarraySum (int[] nums, int k) {
// write code here
Map<Integer,Integer> map = new HashMap<>();
int preSum = 0;
map.put(0,-1);
TreeSet<int[]> set = new TreeSet<>((o1, o2) ->
{
if(o1[0] != o2[0]) {
return o1[0] - o2[0];
}else {
return o1.length - o2.length;
}
});
for(int i=0;i<nums.length;i++){
preSum+=nums[i];
if(map.containsKey(preSum-k)){
int value = map.get(preSum-k);
set.add(Arrays.copyOfRange(nums,value+1,i+1));
}
map.put(preSum,i);
}
int[][] arr = new int[set.size()][];
set.toArray(arr);
return arr;
}
}
本题主要考察的知识点是哈希表的应用,所用编程语言是java。
我们可以将数组前缀和对应的下标存在哈希map当中,然后根据对应下标前缀和相减得到连续数组之和,根据前缀和相减然后与k作比较是否相等。其实我们也可以利用前缀和数组来解决此题。
腾讯云智研发成长空间 216人发布
查看22道真题和解析