2025年- H10-Lc117-560.和为K的子数组(子串)--java版

1.题目描述

2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第1张图片

2.思路

2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第2张图片
2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第3张图片
2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第4张图片
2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第5张图片
2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第6张图片
例子1:
2025年- H10-Lc117-560.和为K的子数组(子串)--java版_第7张图片

3.代码实现

class Solution {
    public int subarraySum(int[] nums, int k) {


        // List list=new ArrayList<>();
        // int cnt=0;
        
        // for(int i=0;i
        // {
        //  for(int j=i+1;j
        //  {
        //     if(nums[i]+nums[j]==k)
        //     {
        //     //  list.add(nums[i],nums[j]);
        //     cnt++;
        //     }
        //  }
        // }
        // return cnt;

        int cnt=0;
        int sum=0;
        Map<Integer,Integer> m=new HashMap<>();

        m.put(0,1);//sum=0出现了一次。 (sum,sum出现的次数)
        // 前缀和为0的出现一次,表示从头开始就是k的情况
       //比如数组是nums[1,2,3],k=3
       //数组和为3的子数组(数组中元素是连续非空序列)
       //[1,2],[3]
        for(int num:nums)
        {
            sum+=num;//计算sum的值,sum的值可以是1,3,6。 k=3
          //sum-k=-2,0,3
           if(m.containsKey(sum-k))//查找nums数组里面的连续子数组的个数
           {
            //m哈希表中有 0:1,1:1,2:1,3:1
            cnt+=m.get(sum-k);//sum是总和,k是整数,查找 该数组中和为 k 的子数组的个数 。
            //所以m中有0:1,3:1,
           }
           // 更新当前前缀和的出现次数
           m.put(sum,m.getOrDefault(sum,0)+1);
        }
        return cnt;
        
        
    }
}

你可能感兴趣的:(leetcode,java,java,开发语言)