LeetCode 560:Subarray Sum Equals K


题意描述

给定一个整数数组和一个整数k,找出和为k的连续子数组的总数。

测试用例

Example 1:

Input:nums = [1,1,1], k = 2
Output: 2

解题思路

一、思路一

暴力解决

    public int subarraySum(int[] nums, int k) {
            int res = 0;
            int len = nums.length;
            for(int i=0;i

二、思路二

如果【i,j】的累加和为k,那么i之前的累加和为sum1,j之前的累加和为sum2,则存在sum2 - sum1 = k

所以我们简历Map存储累计和sum出现的次数,如果sum-k存在于map中,则累加和为k的子数组一定存在。

    public int subarraySum(int[] nums, int k) {
            HashMap map = new HashMap<>();
            map.put(0,1);	//初始加入0,例如nums【0】=10,k=10,如果0不在map中就少一个res
            int res = 0;
            int cur = 0;
            for(int i=0;i