LeetCode-热题100-笔记-day08

560. 和为 K 的子数组https://leetcode.cn/problems/subarray-sum-equals-k/

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

官方答案

算法思路:pre[i]=pre[i-1]+nums[i]; 将以i为结尾的nums[i]的前i项的和添加入map,map键为pre,值为该pre出现的次数;若map中存在pre-k,则pre[j]+nums[i]=k存在;此时将该pre出现的次数累加到ans即可得到;

class Solution {
    public int subarraySum(int[] nums, int k) {
        int ans=0;//答案
        int pre=0;//记录前i项的和
        HashMap map=new HashMap<>();
        map.put(0,1);//key表示以i结尾的nums元素之和,value表示该数字出现的次数
        //循环遍历求出前i项的和
        for(int i=0;i

你可能感兴趣的:(算法,数据结构,leetcode)